首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java BufferedOutputStream:要写多少字节

Java BufferedOutputStream:要写多少字节
EN

Stack Overflow用户
提问于 2012-05-29 18:48:35
回答 4查看 1.5K关注 0票数 2

这更像是一个良知问题,而不是一个技术问题:p我正在编写一些java代码来从一个server...For下载文件,我使用的是BufferedOutputStream方法write()和BufferedInputStream方法read()。

所以我的问题是,如果我使用缓冲区来保存字节,那么要读取的字节数应该是多少?当然,我可以使用int byte = read()逐个字节地读取,然后再写入( byte ),或者我可以使用缓冲区。如果我采用第二种方法,在定义每次读\写的字节数时,是否有什么必须注意的方面?这个数字在我的程序中会有什么影响?

非常感谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-29 18:55:20

除非你有一个非常快的网络连接,否则缓冲区的大小不会有什么不同。我会说4k的buffers会很好,尽管使用更大一点的buffers也没什么坏处。

同样的情况可能也适用于使用read()read(byte[]) ...假设您使用的是BufferedInputStream

除非你有一个非常快/低延迟的网络连接,否则瓶颈将是网络和你的计算机的网络接口所能支持的数据速率。对于典型的互联网连接,应用程序移动数据的速度比网络快两个或更多个数量级。因此,除非您做了一些愚蠢的事情(比如在无缓冲的流上执行1字节的读取),否则Java代码不会成为瓶颈。

票数 1
EN

Stack Overflow用户

发布于 2012-05-29 19:21:13

BufferedInputStream和BufferedOutputStream的实现通常依赖于System.arraycopy。System.arraycopy有一个本机实现,它可能依赖于memmove或bcopy。复制的内存量将取决于缓冲区中的可用空间,但无论如何,本机代码的实现都是非常有效的,不太可能影响应用程序的性能,无论您正在读/写多少字节。

但是,对于BufferedInputStream,如果您设置了一个具有较高限制的标记,则可能需要创建一个新的内部缓冲区。如果您确实使用了标记,则读取比旧缓冲区中可用字节更多的字节可能会导致暂时的性能影响,尽管摊销的性能仍然是线性的。

正如Stephen C所提到的,由于网络的原因,您更有可能看到性能问题。

票数 1
EN

Stack Overflow用户

发布于 2012-05-29 18:54:04

您的网络连接中的MTU(最大流量单位)是多少?例如,如果您使用UDP,则可以检查此值并使用较小的字节数组。如果不是这样,你需要检查内存是如何吞噬你的程序的。我认为1024 - 4096将是一个很好的变种来保存这些数据并继续接收

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

https://stackoverflow.com/questions/10797628

复制
相关文章

相似问题

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