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

时间:2012-01-13 16:10:37

标签: java string memory file-io

我有一个像桌面java swing应用程序的聊天,我不断收到字符串类型的数据。最终,String变量越来越大。

1)将大变量保留在内存中是否明智,只有在日志记录完成后才将其保存到磁盘。

2)如果没有,那么每次我得到一个新的字符串(长度约为30-40)时我应该继续保存。

我应该如何优化这样的设计?

2 个答案:

答案 0 :(得分:4)

我会使用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);

BTW:如果你想知道一个非常庞大的文件是什么样的;)这个例子写了一个8 TB的文件http://vanillajava.blogspot.com/2011/12/using-memory-mapped-file-for-huge.html

答案 1 :(得分:1)

也许您应该使用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所建议的那样,只有保存这么多,然后在某些时候丢弃早期的字符串。不要永远坚持每一条信息。