我正在尝试创建一个处理路径元素的Javadsl流。它应发出与路径元素关联的文件的内容线。换句话说,我认为我需要将路径元素的流变为字符串元素。
流动确实具有平坦的方法,但它涉及使用扁平膜,我不确定如何将其用于我的情况。
final Flow<Path, String, BoxedUnit> toFileLines = Flow
.<Path>create()
.flatten(FlattenStrategy.
任何帮助都非常感谢!
edit1:因此,据我了解,使用StreamReader读取文件并在读者到达' n'时发出新字符串可能是一个好主意。因此,现在的问题是如何从单个转换方法中散发多个元素。喜欢
final Flow<Path, String, BoxedUnit> toFileLines = Flow
.<Path>create()
.mapAsync(
//create streamreader
//while streamreader has.next
//read line until n
//emit line
);
这是可能的吗?
我建议使用 Flow.flatMapConcat
。首先,您必须编写一个源,该源将从文件中产生线路,然后将FlatmapConcat一起使用。我还使用我从文档中获得的框架也有一些bytestring解析:
import java.io.File;
import akka.stream.javadsl.FileIO;
import akka.stream.javadsl.Flow;
import akka.stream.io.Framing;
import akka.util.ByteString;
int maxLineSize = 1024;
final ByteString delim = ByteString.fromString("rn");
final Flow<String, String, BoxedUnit> pathsToContents =
Flow.of(String.class)
.flatMapConcat(path -> FileIO.fromFile(new File(path))
.via(Framing.delimiter(delim, maxLineSize,true))
.map(byteStr -> byteStr.utf8String()));