【发布时间】:2018-01-13 03:27:01
【问题描述】:
所以我目前有一个 akka 流来读取文件列表,还有一个接收器来连接它们,而且效果很好:
val files = List("a.txt", "b.txt", "c.txt") // and so on;
val source = Source(files).flatMapConcat(f => FileIO.fromPath(Paths.get(f)))
val sink = Sink.fold[ByteString, ByteString](ByteString(""))(_ ++ ByteString("\n" ++ _) // Concatenate
source.toMat(sink)(Keep.right).run().flatMap(concatByteStr => writeByteStrToFile(concatByteStr, "an-output-file.txt"))
虽然这对于简单的情况来说很好,但文件相当大(大约 GB,并且无法放入我正在运行此应用程序的机器的内存中。所以我想分块在字节字符串达到一定大小后进行。一个选项是使用Source.grouped(N),但是文件的大小差异很大(从1 KB到2 GB),因此不能保证文件大小的规范化。
我的问题是是否有办法通过字节串的大小来分块写入文件。 akka 流的文档非常庞大,我无法弄清楚该库。任何帮助将不胜感激。谢谢!
【问题讨论】:
标签: scala akka-stream