我正在使用DataInputStream
从文件中读取字节数组并转换为字符串。这是原始代码。请注意,对于DataInputStream
上BufferedInputStream
的{{1}},dis为GZipInputStream
。
FileInputStream
此代码和周围处理慢。我每秒只处理80个文档。一个小小的改变会大大提高速度。
// class definition
var byteBuffer = Array[Byte](0)
...
// Get the payload
if (contentLength > byteBuffer.length) {
println("resize")
byteBuffer = new Array[Byte](contentLength, "UTF-8")
}
dis.read(byteBuffer, 0, contentLength)
new String(byteBuffer)
现在我每秒处理近300份文件。对我来说,为什么每次分配数组应该提供显着的速度优势,即使在深入研究解码代码之后也是没有意义的。有什么想法吗?
val / var的变化无关紧要。如果我删除条件,它会获得相同的速度提升。
答案 0 :(得分:9)
在第二种情况下,您创建一个正确大小的字符串。在第一种情况下,您的字符串都与您之前创建的最大字符串一样大。
您可能稍后处理过的代码会让您注意到这种差异?