在Java中,我将GZIPInputStream包装在FileInputStream上并完成。如何在Scala中完成等效工作?
Source.fromFile("a.csv.gz")....
fromFile返回一个BufferedSource,它真的想要将世界视为一组行。
没有比这更优雅的方式吗?
Source.fromInputStream(new GZIPInputStream(new BufferedInputStream(new FileInputStream("a.csv.gz"))))
答案 0 :(得分:22)
如果你想使用Source
而不是用Java方式做所有事情,那么是的,你将不得不再添加一层包装到你在Java中做的事情。 Source
需要InputStream
,但可以为您Reader
,这会阻止您使用Source
两次。
Scala非常擅长让你永远不需要做更多的工作而不是Java,但特别是对于I / O,你经常需要回到Java类。 (当然,您可以随时定义自己的快捷方式:
def gis(s: String) = new GZIPInputStream(new BufferedInputStream(new FileInputStream(s)))
只比您已输入的内容长,现在您可以重复使用它。)
答案 1 :(得分:6)
我会在流构造中消除BufferedInputStream用法 - > new GZIPInputStream(new FileInputStream("a.csv.gz"))