Запись огромных строковых данных в файл в java, опции оптимизации - PullRequest
1 голос
/ 13 января 2012

У меня есть чат, похожий на настольное Java-приложение Swing, где я продолжаю получать данные типа String.В конце концов, переменная String становится все больше и больше.

1) Разумно ли хранить большую переменную в памяти и сохранять ее на диск только по окончании регистрации.

2) Если нет, то я должен продолжать сохранять каждый раз, когда получаюновая строка (длиной около 30-40).

Как мне оптимизировать такой дизайн?

Ответы [ 2 ]

4 голосов
/ 13 января 2012

Я бы использовал BufferedWriter, например PrintWriter.Это буферизует данные для вас и записывает каждые 8 ​​КБ (фактически каждые 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 ТБ http://vanillajava.blogspot.com/2011/12/using-memory-mapped-file-for-huge.html

1 голос
/ 13 января 2012

Возможно, вам следует использовать 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, она будет поглощать больше памяти.

Как предположил Вируццо, только сохраняйте столько, а затем в какой-то момент отбрасывайте предыдущие строки.Не держись за каждое сообщение навсегда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...