2016-10-21 2 views
0

Так в основном у меня есть:Как написать огромную строку в файл с помощью Java

FileOutputStream fos = new FileOutputStream(dir + "/" + name); 
fos.write(bImg); 
fos.close(); 

Теперь здесь иногда bImg мог содержит более 5MB, которые я случиться, чтобы получить проблемы с производительностью. Поэтому мне может потребоваться записать часть в часть строки в файл. Что-то вроде написания 5000 символов в файл сначала, а затем до 5000 символов и так далее. Но я не знаю, как это сделать.

Пробовал:

String file = dir + "/" + name; 
FileOutputStream fos = new FileOutputStream(new File(file)); 
BufferedOutputStream buffOut=new BufferedOutputStream(fos); 

buffOut.write(bImg); 

buffOut.flush(); 
buffOut.close(); 

Но не повезло еще не имея такую ​​же проблему

+0

Возможный дубликат [Самый быстрый способ записи огромных данных в текстовом файле Java] (http://stackoverflow.com/questions/1062113/fastest-way-to-write-huge-data-in-text-file-java) – maszter

+0

Вы можете использовать перегруженные методы 'write()', такие как http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html#write%28byte%5B%5D,%20int, % 20int% 29 – Rehman

+0

Является ли 'bImg' * строкой *? Имя заставляет это звучать как байт-массив для меня. Если это действительно строка, вы должны использовать 'Writer', а не' OutputStream'. --- Запись массива в 5 Мбайт в одном блоке не должна приводить к проблемам с производительностью. Написание его по частям будет медленнее, чем это. Если у вас проблемы с производительностью, это может быть вверх по потоку, где вы создаете значение 'bImg'. Это не оператор write-to-file. – Andreas

ответ

-1

Вам нужно обернуть строку вывода в BufferedOutputStream. Он будет обрабатывать данные для вас в кусках. Не забудьте очистить BufferedOutputStream, когда вы закончите, чтобы все данные попадали в ваш файл.

+1

Добавление буфера вокруг одной записи одиночной записи «write()» 5 МБ не улучшит производительность. Буферизация помогает, когда выполняется много * маленьких * записей, а не когда происходит одна большая запись. – Andreas

+0

Спасибо, что ответ вы просто попробовали, как вы сказали, но не повезло, вы можете прочитать, как я это делаю в своем обновлении вопроса. – jack

Смежные вопросы