簡體   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