因为 Scala Dispatch 0.9.5 似乎没有用于解压缩 GZIP 流的默认处理程序,所以我试图修改它的as.stream.Lines
处理程序来处理传入数据。由于同一个项目也在使用 Spray.io,我试图GzipDecompressor
在HttpResponseBodyPart
字节上使用它,但它引发了异常。见下文:
def onBodyPartReceived(bodyPart: HttpResponseBodyPart) = {
if (state == CONTINUE) {
val decomp = new GzipDecompressor
val bytes = decomp.decompress( bodyPart.getBodyPartBytes )
onString(new String(bytes, charset))
}
state
}
上面的方法修改了以下内容(第 23 行):https://github.com/dispatch/reboot/blob/master/core/src/main/scala/stream/strings.scala#L23
它抛出一个异常!java.util.zip.ZipException: Not in GZIP format
对于那些想知道 GzipDecompressor 是什么样子的人,这里是:https ://github.com/spray/spray/blob/master/spray-httpx/src/main/scala/spray/httpx/encoding/Gzip.scala
我知道它确实是一个 Gzipped 流。任何解决方法?谢谢!
更新
玩弄以下内容:
val machine = new GZIPDecompressMachine
val bytes = machine.write( bodyPart.getBodyPartBytes )
onString(machine.stop().flatMap((a) => a).mkString)
该课程GZIPDecompressMachine
来自这里:https ://gist.github.com/841435/09921c8dcbb6b2ad01a3161589ed4fe68f256fbc
它抛出了一个异常:java.io.EOFException: Unexpected end of ZLIB input stream
这里有什么想法吗?