如何在Scala中阅读gzip文件

Fra*_*eil 29 scala

在Java中,我将GZIPInputStream包装在FileInputStream上并完成.如何在Scala中完成等效操作?

Source.fromFile("a.csv.gz")....
Run Code Online (Sandbox Code Playgroud)

fromFile返回一个BufferedSource,它真的想要将世界视为一个行集合.

有没有比这更优雅的方式?

Source.fromInputStream(new GZIPInputStream(new BufferedInputStream(new FileInputStream("a.csv.gz"))))
Run Code Online (Sandbox Code Playgroud)

Rex*_*err 23

如果你想使用Source而不是用Java方式做所有事情,那么是的,你将不得不再添加一层包装到你在Java中做的事情. Source需要InputStreams但可以给你Readers,这会阻止你使用Source两次.

Scala非常擅长让你从来没有比Java更多的工作,但特别是对于I/O,你经常需要回到Java类.(当然,您可以随时定义自己的快捷方式:

def gis(s: String) = new GZIPInputStream(new BufferedInputStream(new FileInputStream(s)))
Run Code Online (Sandbox Code Playgroud)

几乎比您已经输入的更长,现在您可以重复使用它.)


kai*_*ius 6

我将消除流构造中的BufferedInputStream用法 - > new GZIPInputStream(new FileInputStream("a.csv.gz"))

  • GZIPInputStream处理缓冲本身,来自JavaDoc的信息:GZIPInputStream(InputStream in) - 创建一个具有默认缓冲区大小的新输入流(我在源中看到的是512字节).和GZIPInputStream(InputStream in,int size) - 创建具有指定缓冲区大小的新输入流. (6认同)