如何创建一个Sink来读取Source中的所有字节?

时间:2016-12-14 18:16:21

标签: scala akka akka-stream

我有一个scala方法,根据我的要求获取此源

def func(data : Source[ByteString,Any]) { ... }

我现在要做的就是从这个源读取所有字节并将它们写入文件。我已经阅读了很多做更复杂事情的例子,例如对所有值进行折叠计算。我想要一些更简单的东西,只是按顺序获取字节,这样我就可以把它们写出来了。我该怎么做?

2 个答案:

答案 0 :(得分:4)

我认为FileIO.toFile应该有用。

它创建一个Sink,它接收传入的字节并将它们写入文件。

请注意,由于您正在使用流,因此您应该避免考虑"获取所有数据"为了把它发送到某个地方。相反,你应该想到"我怎么处理我得到的这一大块数据"。例如,如果您的数据源的大小以千兆字节为单位,那么尝试在一个地方收集所有数据几乎肯定会导致OutOfMemoryError。

答案 1 :(得分:1)

我想举一个例子来提供@Dylan的答案:

EmpID |  Code |  Name | Fld1  | Fld2  | Fld3  | Fld4 | FH  | FB | FHRA
--    |----   | ------|  ---  | ----  |----   |----  | --- |--- | ----
1     | 1008M | ABC   | temp1 | temp2 | temp3 | null |1000 |1210| 0  
2     | 1039E | XYZ   | temp1 | null  | null  | null |0    |3000| 3000   
3     | 1040E | TYS   | null  | null  | null  | temp6|0    |3000| 0