Java 编写介于charstreams inputsupplier和outputsupplier之间的筛选器
我想编写一个grep类型的过滤器,它将Guava Charstreams InputSupplier作为输入,并使用Charstreams OutputSupplier作为输出。如果行满足特定的正则表达式,它应该只将行从inputsupplier传递到outputsupplier 这样做的正确设计模式/模式是什么 我猜你会这样做线过滤器:Java 编写介于charstreams inputsupplier和outputsupplier之间的筛选器,java,design-patterns,guava,Java,Design Patterns,Guava,我想编写一个grep类型的过滤器,它将Guava Charstreams InputSupplier作为输入,并使用Charstreams OutputSupplier作为输出。如果行满足特定的正则表达式,它应该只将行从inputsupplier传递到outputsupplier 这样做的正确设计模式/模式是什么 我猜你会这样做线过滤器: InputSupplier<InputStreamReader> ris = CharStreams.newReaderSupplier(....
InputSupplier<InputStreamReader> ris = CharStreams.newReaderSupplier(....
CharStreams.readLines(ris, new LineProcessor<....
以及实现LineProcessor方法
但是LineProcessor.getResult应该返回什么-只是失败的成功?我应该在周围的函数中使用“最终”输出供应商吗
还是我使用了完全错误的api/方法
如果能用一点伪代码来演示最好的方法,我们将不胜感激
谢谢您的建议。返回列表。因此,根据源代码,它要求LineProcessor累积行数,然后返回结果。在我看来,您的读线器可以是如下内容
new LineProcessor<List<String>>() {
List<String> result = Lists.newArrayList();
public boolean processLine(String line) {
if (line matches regex){
result.add(line.trim());
}
return true;//continue processing
}
public List<String> getResult() {return result;}
});
谢谢-但正如问题所提到的,我希望输出转到outputsupplier,这意味着代码不应该在内存中累积结果。输出可能是1GB的文本-所以我正在寻找更像过滤器的东西。您还可以使CharStreams.Readlines返回您想要的任何类/类型-这取决于您如何声明LineProcesser