file = new RandomAccessFile("xanadu.txt", "rw");
FileChannel channel = file.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(48);
int byteReads = channel.read(buffer);
所以我在缓冲区中分配48作为容量。现在 我认为我正在阅读的txt文件大约是10MB,所以逻辑上它正在超过缓冲区分配大小。 但是当我们尝试阅读时,无论大小如何,我们都能够读取文件的所有内容。 那么这件事怎么可能。
我是这个流媒体领域的新手,所以我的问题似乎非常基础。
答案 0 :(得分:2)
read
调用只读取超过48个字节。
没有任何内容会溢出,您只需要反复拨打read
,直到您阅读了所有预期的数据为止。
这在ReadableByteChannel
界面文档:
从该通道读取一个字节序列到给定的缓冲区中。
尝试从通道读取最多r个字节,其中r是缓冲区中剩余的字节数,即dst.remaining(),此时调用此方法。
在处理完内容后,您需要clear()
缓冲区,然后再将其传回read
。