我正在对加载二进制文件的代码进行性能分析,加载时间大约为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?它肯定不是必需的,但使用它时我的文件大小大大减小。