java流中的最佳块大小

时间:2011-04-12 03:33:40

标签: java sockets stream io

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

2 个答案:

答案 0 :(得分:8)

答案是:取决于。对于一般解决方案,不用担心关于它并只使用库。常见的选择:

答案 1 :(得分:3)

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

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

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

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