繁体   English   中英

将大量字符串数据写入Java中的文件,优化选项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM