在Java中寻找BufferedInputStream的最佳大小
我正在分析正在加载二进制文件的代码。加载时间约为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?它绝对不需要,但使用它时我的文件大小会大大减少。
没有找到相关结果
已邀请:
2 个回复
孝铜差
琳娘
将
放入
并没有什么意义,因为后者已经缓冲了它的输入(但不是输出)。 删除
可能是一个胜利,但如果必须从磁盘读取数据并且不驻留在文件系统缓存中,则很可能对性能有害。原因是从磁盘读取速度非常慢,解压缩速度非常快。因此,从磁盘读取较少的数据并在内存中解压缩它比从磁盘读取更多数据通常更便宜。