哪个运行得更快:对每个要写入的字符串使用 OutputStreamWriter.write(),或者使用 StringBuilder 创建一个大字符串,然后使用 write() 一次?请解释原因。
这里多次使用 write():
writer.write("Registered Players:\n");
while (it.hasNext()) {
int playerID = (Integer) it.next();
Player player = playerRegistry.get(playerID);
writer.write(playerID+": "+player.getPlayerName()+"\n");
}
这里是 StringBuilder:
builder.append("Registered Players:\n");
while (it.hasNext()) {
int playerID = (Integer) it.next();
Player player = playerRegistry.get(playerID);
builder.append(playerID+": "+player.getPlayerName()+"\n");
}
writer.write(builder.toString());
最佳答案
这完全取决于您要写入的 OutputStream
类型。
如果它正在写入内存 (ByteArrayOutputStream
),则不会有任何区别。
如果您正在写入 BufferedOutputStream
,该流将在内存中缓冲您的行,并在缓冲区已满时将其写入底层流,因此它也不会产生任何影响。
如果您正在写入 FileOutputStream
或 SocketOutputStream
,缓冲将带来更好的性能。但是,如果要写入的数据太大,将所有内容缓冲到内存中可能不是一个好主意:它可能需要太多内存。
最好的办法是使用缓冲写入器或流,它将透明地为您处理缓冲,从而避免过多的低级写入,而不必显式缓冲到 StringBuilder
.
关于java - 使用 OutputStreamWriter 写入 : line by line vs all at once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11568627/