DataInputStream
ファイルからバイト配列を読み取り、文字列に変換するために a を使用しています。これが元のコードです。dis はDataInputStream
on a BufferedInputStream
on a GZipInputStream
on 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 の変更は関係ありません。条件を削除するだけで、同じ速度が向上します。