2

我正在使用 aDataInputStream从文件中读取字节数组并转换为字符串。这是原始代码。请注意, dis 是 a DataInputStreamon BufferedInputStreama GZipInputStreamon a FileInputStream

// 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)

这段代码和周围的处理速度很。我每秒只处理 80 个文档。一个小的变化会显着提高速度。

// Get the payload
val byteBuffer = new Array[Byte](contentLength, "UTF-8")
dis.read(byteBuffer, 0, contentLength)

new String(byteBuffer)

现在我每秒处理近 300 个文档。对我来说,为什么每次分配数组都应该提供显着的速度优势对我来说毫无意义,即使在深入研究解码代码之后也是如此。有任何想法吗?

val/var 变化无关紧要。如果我只是删除条件,它会获得相同的速度提升。

4

1 回答 1

9

在第二种情况下,您制作了一个大小合适的字符串。在第一种情况下,您的字符串都与您之前创建的最大字符串一样大。

您可能有后来的处理代码让您没有注意到这种差异?

于 2013-03-11T17:38:51.663 回答