javaNIO中关于ByteBuffer的用法

 更新时间:2023年08月21日 10:09:37   作者:15191806282  
这篇文章主要介绍了javaNIO中关于ByteBuffer的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

javaNIO中ByteBuffer用法

ByteBuffer类是在javaNIO中常常使用的一个缓冲区类,使用ByteBuffer可以进行高效的IO操作

下来我们看一下ByteBuffer类的常用方法

ByteBuffer.allocate();或者ByteBuffer.wrap();创建ByteBuffer

 public static ByteBuffer allocate(int capacity) {
        if (capacity < 0)
            throw new IllegalArgumentException();
        return new HeapByteBuffer(capacity, capacity);
    }
 public static ByteBuffer wrap(byte[] array,
                                    int offset, int length)
 {
    try {
         return new HeapByteBuffer(array, offset, length);
    } catch (IllegalArgumentException x) {
            throw new IndexOutOfBoundsException();
     }
  }

读写的方法就read()、write(),在这之中我们看一下ByteBuffer内部字段

  • position:当前读取的位置
  • mark:为某一读过的位置做标记,便于有时候回退到该位置
  • capacity:初始化时候的容量
  • limit:读写的上限,limit <= capacity

flip()方法写完数据需要开始读的时候,将position复位到0,并将limit设为当前position

 public final Buffer flip() {
        limit = position;
        position = 0;
        mark = -1;
        return this;
    }

clear()方法是将position置为0,并不清除buffer内容

 public final Buffer clear() {
        position = 0;
        limit = capacity;
        mark = -1;
        return this;
    }

*mark()方法是标记,reset()方法是回到标记

 public final Buffer mark() {
        mark = position;
        return this;
    }
 public final Buffer reset() {
        int m = mark;
        if (m < 0)
            throw new InvalidMarkException();
        position = m;
        return this;
    }

下来看一个例子

public void test() throws IOException
    {
        ByteBuffer buff = ByteBuffer.allocate(256);
        FileChannel in = null;
        FileChannel out = null;
        try
        {
            in = new FileInputStream("filein").getChannel();
            out = new FileOutputStream("fileout").getChannel();
            while(fin.read(buff) != -1) {
                buff.flip();
                fout.write(buff);
                buff.clear();
            }
        }
        catch (FileNotFoundException e)
        {
            throw e;
        } finally {
            try {
                if(in != null) {
                    in.close();
                }
                if(fout != null) {
                    out.close();
                }
            } catch(IOException e) {
                throw e;
            }
        }
    }

使用isoparser包,报错java.nio.bytebuffer.limiy(i)

问题描述

使用isoparser包,报错java.nio.bytebuffer.limiy(i)

IsoFile isoFile = new IsoFile("文件路径");

原因分析

我使用的是isoparser的1.9.41,某些依赖包版本太低不支持

解决方案

换成更低的版本1.9.39

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解Java注解实现自己的ORM

    详解Java注解实现自己的ORM

    这篇文章主要介绍了Java注解实现自己的ORM知识,本文通过示例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-10-10
  • java对象和json的来回转换知识点总结

    java对象和json的来回转换知识点总结

    在本篇文章里小编给大家分享了一篇关于java对象和json的来回转换知识点总结内容,有兴趣的朋友们可以学习下。
    2021-01-01
  • java自定义注解验证手机格式的实现示例

    java自定义注解验证手机格式的实现示例

    这篇文章主要介绍了java自定义注解验证手机格式的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java实现多人聊天室(含界面)

    Java实现多人聊天室(含界面)

    这篇文章主要为大家详细介绍了Java实现多人聊天室,包含界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 手把手教你写一个SpringBoot+gRPC服务

    手把手教你写一个SpringBoot+gRPC服务

    本文将在本地环境下搭建gRPC客户端和服务端,并成功建立通讯发送消息的方式,从而帮助大家深入了解gRPC在Spring Boot项目中的应用,有需要的小伙伴可以参考下
    2023-12-12
  • Java源码分析:Guava之不可变集合ImmutableMap的源码分析

    Java源码分析:Guava之不可变集合ImmutableMap的源码分析

    今天给大家带来的是关于Java源码的相关知识,文章围绕着Java ImmutableMap展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下,希望能给你带来帮助
    2021-06-06
  • 浅谈SpringBoot中properties、yml、yaml的优先级

    浅谈SpringBoot中properties、yml、yaml的优先级

    优先级低的配置会被先加载,所以优先级高的配置会覆盖优先级低的配置,本文就来介绍一下SpringBoot中properties、yml、yaml的优先级,感兴趣的可以了解一下
    2023-08-08
  • spring boot实战之使用JSP的示例

    spring boot实战之使用JSP的示例

    本篇文章主要介绍了spring boot实战之使用JSP的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Java聊天室之使用Socket实现传递对象

    Java聊天室之使用Socket实现传递对象

    这篇文章主要为大家详细介绍了Java简易聊天室之使用Socket实现传递对象功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以了解一下
    2022-10-10
  • 一文深入解析JDBC超时机制

    一文深入解析JDBC超时机制

    恰当的JDBC超时设置能够有效地减少服务失效的时间,下面这篇文章主要给大家介绍了关于JDBC超时机制的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-10-10

最新评论