30

在 Java 中,我将 GZIPInputStream 包装在 FileInputStream 上并完成。Scala 中的等价物是如何完成的?

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

fromFile 返回一个 BufferedSource,它确实想将世界视为线条的集合。

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

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

2 回答 2

23

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

Scala 非常擅长让您不必做比 Java 更多的工作,但尤其是在 I/O 方面,您经常不得不退回到 Java 类。(当然,您始终可以定义自己的快捷方式:

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

仅比您已经键入的内容长,现在您可以重复使用它。)

于 2013-02-18T16:12:33.793 回答
7

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

于 2014-11-25T20:08:58.050 回答