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

所以我在缓冲区中分配了 48 个容量。现在考虑我正在阅读的 txt 文件大小约为 10MB ,因此从逻辑上讲它跨越了缓冲区分配大小。但是当我们尝试读取时,我们将能够读取文件的所有内容,而不管文件大小。所以这件事怎么可能。

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

4

1 回答 1

2

read调用根本不会读取超过 48 个字节。

什么都不会溢出,您只需要read反复调用,直到您读取了您期望的所有数据。

这在ReadableByteChannel接口文档中有所说明:

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

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

clear()在将其内容传递回之前,您需要处理缓冲区内容read

于 2012-04-29T14:58:06.510 回答