我有一种情况,我继续用ByteBuffer阅读如下。
ByteBuffer buffer = MappedByteBuffer.allocateDirect(Constants.BUFFER_SIZE);
但是当读数到达边界时(当剩余的读取字节小于BUFFER_SIZE时),我只需要读取boundaryLimit - FileChannel's current position
。
表示边界限制为x且当前位置为y,那么我需要从y
读取字节直到x
,而不是超出此范围。
我如何实现这一目标?
我不想用新容量创建另一个实例。
答案 0 :(得分:2)
这里误导了使用MappedByteBuffer。你应该使用
ByteBuffer buffer = ByteBuffer.allocateDirect(Constants.BUFFER_SIZE);
如果您读取的字节数不足,则不是问题
channel.read(buffer);
buffer.flip();
// Will be between 0 and Constants.BUFFER_SIZE
int sizeInBuffer = buffer.remaining();
编辑:从文件中的随机位置读取。
RandomAccessFile raf =
MappedByteBuffer buffer= raf.getChannel()
.map(FileChannel.MapMode.READ_WRITE, start, length);
答案 1 :(得分:0)
除了使用其他API(如FileInputStream,RandomAccessFile或MappedByteBuffer)之外,没有其他答案。如果你必须使用ByteBuffer,你必须在发生后自己检测过度读取,并相应地进行补偿。