我有一个理论问题。我们假设你有一个InputStream
和一个OutputStream
。您需要将内容从一个复制到另一个,并且您不确切知道需要传输的内容的大小。 write
方法中块大小的一般最佳选择是什么?
答案 0 :(得分:8)
答案是:取决于。对于一般解决方案,不用担心关于它并只使用库。常见的选择:
答案 1 :(得分:3)
BufferedInputStream和BufferedOutputStream的默认缓冲区大小为8 KB,这通常是一个很好的大小。
注意:如果你正在快速读取Socket,你将很少得到一个数据包,大约1.5 KB。如果您正在从磁盘读取数据,通常会得到您要求的任何大小,但性能不会从32 KB提高到256 KB,并且可能取决于您使用的硬件。
但是我也发现,除非你是基准测试,否则你很少看到一个明显的区别,如果你只使用512字节作为缓冲区大小(充气机/平移器流),即差异可能是15%或更少。
总之,您不太可能注意到512字节和32 KB之间的缓冲区大小存在差异。对于大多数情况,后者可能绰绰有余。我倾向于使用256 KB,因为我有很多内存和很少的预分配缓冲区。