如果我们超过了在Java中的ByteBuffer.allocate(48)NIO包类中分配缓冲区的容量怎么办?

时间:2012-04-29 14:55:18

标签: java io stream nio bytebuffer

 file = new RandomAccessFile("xanadu.txt", "rw");
        FileChannel channel = file.getChannel();
        ByteBuffer buffer = ByteBuffer.allocate(48);
        int byteReads = channel.read(buffer);

所以我在缓冲区中分配48作为容量。现在 我认为我正在阅读的txt文件大约是10MB,所以逻辑上它正在超过缓冲区分配大小。 但是当我们尝试阅读时,无论大小如何,我们都能够读取文件的所有内容。 那么这件事怎么可能。

我是这个流媒体领域的新手,所以我的问题似乎非常基础。

1 个答案:

答案 0 :(得分:2)

read调用只读取超过48个字节。

没有任何内容会溢出,您只需要反复拨打read,直到您阅读了所有预期的数据为止。

这在ReadableByteChannel界面文档:

中说明
  

从该通道读取一个字节序列到给定的缓冲区中。

     

尝试从通道读取最多r个字节,其中r是缓冲区中剩余的字节数,即dst.remaining(),此时调用此方法。

在处理完内容后,您需要clear()缓冲区,然后再将其传回read