Scala Source.fromInputStream не дает полных результатов - PullRequest
0 голосов
/ 12 октября 2018

Мы работаем над написанием существующей утилиты 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
    }

Но выходной файл каждый раз создается с разными размерами сскалярный код.Код Python работает нормально.Запросы REST POST и GET одинаковы для обеих утилит.Я не получаю никаких ошибок в Scala, он успешно выполняется, но создает файлы разных размеров.Любая помощь будет очень признательна.

Спасибо!

1 Ответ

0 голосов
/ 12 октября 2018

Если это Apache HTTP, то HttpEntity имеет метод writeTo, который записывает содержимое непосредственно в OutputStream.

response.getEntity().writeTo(new FileOutputStream(outputFile))

. Это не перекодирует данные, как в оригинальном Scalaделает, но версия Python этого тоже не делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...