您如何决定对InputStream.read()使用哪种byte []大小?

从InputStreams读取时,如何确定byte []使用什么大小?

int nRead;

byte[] data = new byte[16384]; // <-- this number is the one I'm wondering about

while ((nRead = is.read(data, 0, data.length)) != -1) {

...do something..

}

什么时候使用小号vs大号?有什么区别?该数字是否要以1024为增量?如果它是网络vs磁盘的InputStream,是否会有区别?

非常感谢,我似乎在其他地方找不到明确的答案。

回答:

大多数人使用2的幂作为大小。如果缓冲区至少为512字节,则差异不大(<20%)

对于网络,最佳大小可以为2 KB至8 KB(基础数据包大小通常约为1.5 KB)。对于磁盘访问,最快的大小可以为8K至64

KB。如果您使用8K或16K,则不会有问题。

请注意,对于网络下载,您可能会发现通常不使用整个缓冲区。对于99%的用例而言,浪费几KB并没有多大关系。

以上是 您如何决定对InputStream.read()使用哪种byte []大小? 的全部内容, 来源链接: utcz.com/qa/410315.html

回到顶部