Bra*_*rad 5 java optimization bufferedinputstream
我正在分析正在加载二进制文件的代码.加载时间约为15秒.
我的大部分加载时间来自加载二进制数据的方法.
我有以下代码来创建我的DataInputStream:
is = new DataInputStream(
new GZIPInputStream(
new FileInputStream("file.bin")));
Run Code Online (Sandbox Code Playgroud)
我把它改成了这个:
is = new DataInputStream(
new BufferedInputStream(
new GZIPInputStream(
new FileInputStream("file.bin"))));
Run Code Online (Sandbox Code Playgroud)
所以在我做了这个小修改之后,加载代码从15秒变为4.
但后来我发现BufferedInputStream有两个构造函数.另一个构造函数允许您显式定义缓冲区大小.
我有两个问题:
GZIPInputStream和BufferedInputStream都使用内部缓冲区.这就是为什么在GZIPInputStream中使用BufferedInputStream不会带来任何好处.GZIPInputStream的问题在于它不会缓冲它生成的输出,因此您当前的版本要快得多.
BufferedInputStream的默认缓冲区大小为8kb,因此您可以尝试增加或减少它以查看它是否有帮助.我怀疑确切的数字很重要,所以你可以简单地乘以或除以2.
如果文件很小,您也可以尝试完全缓冲它.这应该在理论上给你最好的表现.您还可以尝试增加GZIPInputStream的缓冲区大小(默认为512字节),因为这可能会加快从磁盘读取速度.
| 归档时间: |
|
| 查看次数: |
4631 次 |
| 最近记录: |