Scala Source.fromInputStream无法生成完整结果

时间:2018-10-12 09:39:31

标签: python scala rest

我们正在努力将现有的python实用程序写入Scala。实用程序从REST API以“ .gzip”文件下载压缩数据。

Python代码:

response=requests.get(url,stream=True,headers=self.header,proxies=config.PROXIES,timeout=config.TIMEOUT)
        with open(file_path, 'wb+') as f:
            shutil.copyfileobj(response.raw, f) 

在scala中,我是这样写的:

var out: GZIPOutputStream = new GZIPOutputStream(new FileOutputStream(outputFile))
    var writer= new PrintWriter(out)
    try {
      val inputStrem: InputStream = response.getEntity.getContent
      val gzipInputStream = new GZIPInputStream(inputStrem)
      for(line <- Source.fromInputStream(gzipInputStream).getLines){
        writer.write(line+"\n")
      }          
    } catch {
      case e: Exception => throw e
     }finally {
      if (writer != null) writer.close
    }

但是每次使用scala代码生成的输出文件大小都不同。 Python代码运行正常。 两种工具的REST POST和GET请求相同。 我在scala中没有收到任何错误,它已成功执行,但是创建了不同大小的文件。 任何帮助将不胜感激。

谢谢!!

1 个答案:

答案 0 :(得分:0)

如果这是Apache HTTP,则ufs put scrollbit.py ufs put main.py 有一个HttpEntity方法将内容直接写到writeTo

OutputStream

这不会像原始Scala那样重新编码数据,但是Python版本也不会这样做。