Подтвердить что ты не робот

Как читать файл gzip'd в Scala

В Java я бы обернул GZIPInputStream поверх FileInputStream и сделаю это. Как эквивалент делается в Scala?

Source.fromFile("a.csv.gz")....

fromFile возвращает BufferedSource, который действительно хочет видеть мир как набор строк.

Нет ли более элегантного способа, чем это?

Source.fromInputStream(new GZIPInputStream(new BufferedInputStream(new FileInputStream("a.csv.gz"))))
4b9b3361

Ответ 1

Если вы хотите использовать Source и не делать все на Java-пути, то да, вам придется добавить еще один слой обертывания к тому, что вы делали на Java. Source принимает InputStream, но может дать вам Reader s, что не позволяет вам дважды использовать Source.

Scala довольно хорош в том, что вам не нужно больше работать, чем на Java, но особенно с I/O, вам часто приходится возвращаться к классам Java. (Вы всегда можете определить свои собственные ярлыки, конечно:

def gis(s: String) = new GZIPInputStream(new BufferedInputStream(new FileInputStream(s)))

чуть длиннее того, что вы уже набрали, и теперь вы можете его повторно использовать.)

Ответ 2

Я бы исключил использование BufferedInputStream в построении потока → новый GZIPInputStream (новый FileInputStream ( "a.csv.gz" ))