gpt4 book ai didi

java - 我如何决定从输入流中读取多少字节?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:38:45 24 4
gpt4 key购买 nike

我正在尝试从 InputStream 中读取数据。我写了下面的代码

byte[] bytes = new byte[1024 * 32];
while (bufferedInStream.read(bytes) != -1) {
bufferedOutStream.write(bytes);
}

我不明白的是我应该在一次迭代中读取多少字节?该流包含一个保存在磁盘上的文件。

我读了here但我真的没看懂帖子。

最佳答案

假设水从管道流入浴缸。然后你用一个桶从浴缸里取水,然后带到你的花园里给草坪浇水。浴缸是缓冲器。当您穿过草坪时,缓冲区会被填满,因此当您返回时,会有一桶水供您再次使用。

如果浴缸很小,那么当您提着水桶走路时它可能会溢出,因此您会失去水。如果你有一个大浴缸,那么它就不太可能溢出来。所以更大的缓冲区更方便。但当然,更大的浴缸要花更多的钱并占用更多的空间。

程序中的缓冲区占用了内存空间。而且您不想仅仅因为方便就占用了缓冲区的所有可用内存。

通常在您的读取函数中,您可以指定要读取的字节数。所以即使你有一个小缓冲区,你也可以这样做(伪代码):

const int bufsize = 50;
buf[bufsize];
unsigned read;
while ((read = is.read(buf, bufsize)) != NULL) {
// do something with data - up to read bytes
}

在上面的代码中,bufzise 是要读入缓冲区的最大数据。

如果您的读取函数不允许您指定要读取的最大字节数,那么您需要提供一个足够大的缓冲区以接收最大可能的读取量。

因此最佳缓冲区大小是特定于应用程序的。只有应用程序开发人员会知道数据的特性。例如,水流入浴缸的速度有多快。你能买得起多大的浴缸(嵌入式应用程序),你能以多快的速度把水桶从浴缸里拿出来穿过花园再搬回来。

关于java - 我如何决定从输入流中读取多少字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26095918/

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