使用Java下载文件时的合理缓冲区大小

Lor*_*ias 9 java optimization performance

使用Java传输(无论UP/DOWN)大文件(3-4演出)时使用的合理缓冲区大小是多少?

byte buf[] = new byte[1024]
Run Code Online (Sandbox Code Playgroud)

要么

byte buf[] = new byte[5 * 1024 * 1024]
Run Code Online (Sandbox Code Playgroud)

有时即使您使用大缓冲区并传递给read(byte array [])方法,这也不能保证您将获得完整的5 me缓冲区.在我的测试中,我观察到每次read()调用的平均大小通常是1.5kb.这是否明智有效?如果有人能指出我更详细地讨论这个问题的资源,我会很高兴的.

NPE*_*NPE 10

听起来你正在从网络连接中读取(TCP?)

1500字节是默认的以太网MTU,这解释了为什么每次读取通常需要1.5KB.通过将网络堆栈配置为使用巨型帧,MTU通常可以增加到9KB .

考虑到这一点,几乎肯定没有必要buf大于9KB.使用较小的缓冲区(例如超过1KB)可能会或可能不会对性能产生负面影响.

无论如何,获得明确答案的唯一方法是通过对各种缓冲区大小进行基准测试.