加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在Java中寻找BufferedInputStream的最佳大小

发布时间:2020-12-14 19:22:34 所属栏目:Java 来源:网络整理
导读:我正在分析正在加载二进制文件的代码.加载时间约为15秒. 我的大部分加载时间来自加载二进制数据的方法. 我有以下代码来创建我的DataInputStream: is = new DataInputStream( new GZIPInputStream( new FileInputStream("file.bin"))); 我把它改成了这个: i

我正在分析正在加载二进制文件的代码.加载时间约为15秒.

我的大部分加载时间来自加载二进制数据的方法.

我有以下代码来创建我的DataInputStream:

is = new DataInputStream(
     new GZIPInputStream(
     new FileInputStream("file.bin")));

我把它改成了这个:

is = new DataInputStream(
     new BufferedInputStream(
     new GZIPInputStream(
     new FileInputStream("file.bin"))));

所以在我做了这个小修改之后,加载代码从15秒变为4.

但后来我发现BufferedInputStream有两个构造函数.另一个构造函数允许您显式定义缓冲区大小.

我有两个问题:

>在BufferedInputStream中选择了什么尺寸,它是否理想?如果没有,我怎样才能找到缓冲区的最佳大小?我应该写一些快速执行二进制搜索的代码吗?
>这是我使用BufferedInputStream的最佳方式吗?我最初在GZIPInputStream中拥有它,但是有可以忽略不计的好处.我假设代码现在正在做的是每次需要填充文件缓冲区时,GZIP输入流经过并解码x个字节(其中x是缓冲区的大小).是否值得完全省略GZIPInputStream?它绝对不需要,但使用它时我的文件大小会大大减少.

最佳答案
GZIPInputStream和BufferedInputStream都使用内部缓冲区.这就是为什么在GZIPInputStream中使用BufferedInputStream不会带来任何好处. GZIPInputStream的问题在于它不会缓冲它生成的输出,因此您当前的版本要快得多.

BufferedInputStream的默认缓冲区大小为8kb,因此您可以尝试增加或减少它以查看它是否有帮助.我怀疑确切的数字很重要,所以你可以简单地乘以或除以2.

如果文件很小,您也可以尝试完全缓冲它.这应该在理论上给你最好的表现.您还可以尝试增加GZIPInputStream的缓冲区大小(默认为512字节),因为这可能会加快从磁盘读取速度.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读