在Scala中解压缩async-http-client gzipped HttpResponseBodyPart?

时间:2013-04-04 09:00:46

标签: java scala http gzip scala-dispatch

因为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这里有什么想法?

0 个答案:

没有答案