用数据填充 BufferedReader

fill BufferedReader with data

我找到的所有示例都是从文件中填充 BufferedReader。我需要用 "for" 循环中的数据填充它,如下所示:

List<Nodes> nodes; //there are data here
BufferedReader bufRead = null;
for (Node node : nodes) {   
    //need to fill the BufferedReader with node data line by line    
    bufRead = new BufferedReader(new InputStreamReader(null, node.toString()+"\n"));    
}
//use the BufferedReader later on

您不会“填写”ReaderReader是一个动词,表示它某物,所以你必须提供正在读的来源。

如果您有 Java 生成文本的代码,您稍后想阅读,然后使用例如StringWriter to write the text into a memory buffer. You can then later read that text using e.g. a StringReader.

例子

String text;
try (StringWriter strOut = new StringWriter()) {
    try (PrintWriter out = new PrintWriter(strOut)) {
        for (Node node : nodes) {
            out.println(node);
        }
    }
    text = strOut.toString();
}

try (BufferedReader in = new BufferedReader(new StringReader(text))) {
    for (String line; (line = in.readLine()) != null; ) {
        // use line here
    }
}

更新

From comment: I was wondering if there is a more "elegant", shorter solution

使用PrintWriter当然是可选的,而且有了String版本的ReaderWriter,就真的没必要调用[=20了=].

StringWriter out = new StringWriter();
for (Node node : nodes) {
    out.write(node + "\n");
}

BufferedReader in = new BufferedReader(new StringReader(out.toString()));
for (String line; (line = in.readLine()) != null; ) {
    // use line here
}

或者,您可以使用 StringBuilder

StringBuilder buf = new StringBuilder();
for (Node node : nodes) {
    buf.append(node).append('\n');
}

BufferedReader in = new BufferedReader(new StringReader(buf.toString()));
for (String line; (line = in.readLine()) != null; ) {
    // use line here
}