gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:49:41 25 4
gpt4 key购买 nike

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

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

我是这个流媒体领域的新手,所以我的问题可能看起来非常基本。

最佳答案

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

什么都不会溢出,您只需要重复调​​用read,直到读取完所需的所有数据。

这在 ReadableByteChannel 中有说明。接口(interface)文档:

Reads a sequence of bytes from this channel into the given buffer.

An attempt is made to read up to r bytes from the channel, where r is the number of bytes remaining in the buffer, that is, dst.remaining(), at the moment this method is invoked.

您需要clear()处理其内容后将其传回read之前的缓冲区。

关于java - 如果我们超出了Java中ByteBuffer.allocate(48) NIO包类中分配缓冲区的容量怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10373135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com