首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中下载文件时合理的缓冲区大小

在Java中下载文件时合理的缓冲区大小
EN

Stack Overflow用户
提问于 2011-09-05 21:43:50
回答 2查看 4.3K关注 0票数 9

当使用Java传输(不管向上/向下)大文件(3-4 of )时,合理的缓冲区大小是多少?

代码语言:javascript
复制
byte buf[] = new byte[1024]

代码语言:javascript
复制
byte buf[] = new byte[5 * 1024 * 1024]

有时,即使您使用一个大的缓冲区并传递给一个读取(字节array[])方法,这也不能保证您将获得一个完整的5me缓冲区。在我的测试中,我观察到每次read()调用的平均大小通常是1.5kb。这在性能方面有意义吗?如果有人能给我推荐一个讨论这个问题的更详细的资源,我会很高兴的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-05 21:47:47

听起来像是在从网络连接(TCP?)读取数据。

1500字节是默认的以太网MTU,这解释了为什么每次读取通常会获得1.5KB。通过将网络堆栈配置为使用jumbo frames,MTU通常可以增加到9KB。

考虑到这一点,几乎可以肯定,使buf大于9KB是没有意义的。使用较小的缓冲区(比方说超过1KB)可能会也可能不会对性能产生负面影响。

在任何情况下,获得明确答案的唯一方法是对各种缓冲区大小进行基准测试。

票数 10
EN

Stack Overflow用户

发布于 2013-02-26 06:54:49

在我的研究和测试中,在使用Java6的Linux上从套接字读取数据时,8K是最优的缓冲区大小。如果分配的缓冲区大于8K,那将是对空间的浪费。我读到过Java的本机调用使用8K缓冲区,这就是为什么8K是最佳的,但我已经失去了我的参考资料。有一个bug指出了这一事实,但这不是确凿的证据:http://bugs.sun.com/view_bug.do?bug_id=6444633

也就是说,尝试在您有兴趣部署的平台上进行实验,您将找到最佳的缓冲区大小。如果你很懒,8K是一个很好的默认值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7308957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档