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源码分析:Guava之不可变集合ImmutableMap的源码分析
今天给大家带来的是关于Java源码的相关知识,文章围绕着Java ImmutableMap展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下,希望能给你带来帮助2021-06-06浅谈SpringBoot中properties、yml、yaml的优先级
优先级低的配置会被先加载,所以优先级高的配置会覆盖优先级低的配置,本文就来介绍一下SpringBoot中properties、yml、yaml的优先级,感兴趣的可以了解一下2023-08-08
最新评论