[英]Writing huge string data to file in java, optimization options
我有一个像桌面Java Swing应用程序这样的聊天室,在这里我不断获取String类型数据。 最终,String变量不断增长。
1)将大变量保留在内存中,并且仅在日志记录完成后才将其保存到磁盘是明智的主意。
2)如果没有,那么我应该每次我得到一个新的字符串(长度大约为30-40)时继续保存。
我应该如何优化这种设计?
我会使用BufferedWriter,例如PrintWriter。 这将为您缓冲数据并每8 KB(实际上每8192个字符)写入一次。 如果您想更频繁地编写,则可以使用flush()或较小的缓冲区。
PrintWriter pw = new PrintWriter("my.log");
// will actually write to the OS, 5 times. (1000 * 40 / 8192)
for(int i = 0; i < 1000; i++) {
pw.printf("%39d%n", i); // a 40 character number.
}
pw.flush();
或者你可以使用
pw.println(lineOfText);
顺便说一句:如果您想知道真正的大文件是什么;)此示例将写入一个8 TB的文件http://vanillajava.blogspot.com/2011/12/using-memory-mapped-file-for-huge.html
也许您应该使用StringBuilder
。 将每条新消息附加到该消息,最后将其转换为字符串。
例如,
StringBuilder sb = new StringBuilder();
// Do your code that continuously adds new messages/strings.
sb.append(new_string);
// Then once you are done...
String result = sb.toString();
如果您有一些字符串,请说String message
,并且每次收到新的消息/字符串时,都会执行message += new_string
,它将占用更多的内存。
正如Viruzzo所建议的那样,只保存那么多,然后在某个时候丢弃早期的字符串。 不要永远保留每条消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.