我正在分析加载二进制文件的代码。加载时间约为 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 值得吗?绝对不需要,但是使用它时我的文件大小会大大减小。