来自输入流的数据由每行上的多个JSON对象组成。我只对从流中传入的一小部分(5-8%)对象感兴趣,这些对象包含特定的JSON键值组合。
我正在从InputStream中读取数据并将其写入文件。是否可以仅写入与特定简单正则表达式匹配的对象(即行)? (由于对象很大,将其解析为json并查找密钥将浪费时间,正则表达式匹配会更快。)
这只是一个疯狂的想法,我不确定这是否可行。如果是,任何提示,链接,指针?
来自EMR中40个独立主机上的各种不同InputStream的总数据约为3TB。由于各种原因(主要是那些here),我想避免对此进行后处理。
答案 0 :(得分:0)
您可以在BufferedReader
上使用InputStreamReader
。然后你会readLine()
并将该特定线与模式匹配。如果匹配,则将其写入文件。确保您的阅读器具有正确的字符编码。
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
PrintWriter writer = new PrintWriter(new BufferedWriter(new File(...)))
String line;
while ((line=reader.readLine())!=null) {
if (line.matches(patternString)) {
writer.println(line);
}
}
使用BufferedReader
明显快于Scanner
。
答案 1 :(得分:0)
您可以使用可以扫描InputStream的java.util.Scanner
。
Scanner scanner = new Scanner(yourInputStream);
scanner.findWithinHorizon("your_pattern", 0);
请注意:
findWithinHorizon
可能会导致大量数据被缓冲。所以你可能想先用较小的匹配进行过滤,比如最大长度。{{}}
这样的嵌套模式时并不优雅,例如Json允许的。因此,相应地设计你的模式。