![](/img/trans.png)
[英]Java Cipher update()/doFinal() with Streams aligned to block size
[英]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.