Java: В чем разница между StreamWriter и BufferWriter? - PullRequest
2 голосов
/ 16 июня 2011

Я занимаюсь разбором файла размером 800 МБ (высокая вероятность более 2 ГБ). Я разбил его на несколько файлов, которые примерно 1-3 КБ на файл.

Я бы хотел проконсультироваться с вами, ребята, который лучше использовать среди двух: BufferedWriter и OutputStreamWriter

Любые указания в правильном направлении приветствуются.

Ответы [ 2 ]

9 голосов
/ 16 июня 2011

Хорошо, так как вы спрашиваете.

Writer - абстрактный класс, в котором конкретные реализации позволяют писать символы / строки.В отличие от необработанных байтов, которые делают реализации OutputStream.

FileWriter - конкретная реализация, которая позволяет записывать в файл.Слабость: кодировка символов жестко запрограммирована в качестве локали по умолчанию, например, обычно Windows-1252 в Windows и UTF-8 в Linux.

Чтобы преодолеть это, многие начинают с OutputStream (может быть, FileOutputStream), а затем преобразовать его в Writer, используя OutputStreamWriter, потому что конструктор позволяет установить кодировку.

Пример:

OutputStream os = new FileOutputStream("turnip");
Writer writer = new OutputStreamWriter(os,"UTF-8");
writer.write("This string will be written as UTF-8");

Теперь с OutputStreams / Writers (и их обратнымиклассы InputStream / Readers), это часто полезно для того, чтобы обернуть вокруг них BufferedWriter.

продолжение примера

writer=new BufferedWriter(writer);
writer.write("Another string in UTF-8");

Что это делает?BufferedWriter в основном обеспечивает буфер памяти.Все, что вы пишете, сначала сохраняется в памяти, а затем записывается по мере необходимости на диск (или куда угодно).Это часто обеспечивает значительное улучшение производительности.Чтобы продемонстрировать это, просто создайте цикл, скажем, 100 000 записей без BufferedWriter, измерьте его и сравните с версией Buffered.

0 голосов
/ 16 июня 2011

В Java нет средства записи потоков

Если вы хотите узнать о потоке ввода и вывода, лучше всего изучить следующую ссылку

...