繁体   English   中英

java流中的最佳块大小

[英]Optimal block size in java streams

我有一个理论问题。 让我们假设你有一个InputStream和一个OutputStream 您需要将内容从一个复制到另一个,并且您不确切知道需要传输的内容的大小。 一般来说, write方法中块大小的最佳选择是什么?

答案是: 这取决于。 对于一般解决方案,请不要担心它,只需使用库。 常见选择:

BufferedInputStream和BufferedOutputStream的默认缓冲区大小为8 KB,这通常是一个很好的大小。

注意:如果你正在快速读取Socket,你将很少得到一个数据包,大约1.5 KB。 如果您正在从磁盘读取数据,则通常会获得您要求的任何大小,但性能不会从32 KB提高到256 KB,并且很可能取决于您使用的硬件。

但是我也发现,除非你是基准测试,否则你很少看到一个明显的区别,如果你只使用512字节作为缓冲区大小(充气机/平移器流),即差异可能是15%或更少。

总之,您不太可能注意到512字节和32 KB之间的缓冲区大小的差异。 对于大多数情况,后者可能绰绰有余。 我倾向于使用256 KB,因为我有大量的内存和很少的预分配缓冲区。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM