BufferedWriter против PrintWriter с сокетами?

В этом случае оптимизируйте производительность в сокетах java, что лучше, с сокетами, BufferedWriter или PrintWriter?

Сокет в каждом потоке (клиент) отправляет форматированные данные в строках, строку с CR. В BufferedWriter я бы использовал newLine после write()?

Спасибо за вашу помощь.

С уважением.


person user1424139    schedule 31.05.2012    source источник


Ответы (2)


В Javadoc BufferedWriter конкретно указано:

Если не требуется быстрый вывод, рекомендуется обернуть BufferedWriter вокруг любого модуля записи, чьи операции write() могут быть дорогостоящими, например, FileWriters и OutputStreamWriters. Например,

 PrintWriter out
   = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
person Louis Wasserman    schedule 31.05.2012
comment
Я тестирую 3 варианта: out = new PrintWriter(client.getOutputStream(), true); out = новый BufferedWriter (новый OutputStreamWriter (client.getOutputStream())); out = новый PrintWriter (новый BufferedWriter (новый OutputStreamWriter (client.getOutputStream ())), true); а вариант с меньшей задержкой - первый. Когда я выполняю flush() после println, задержка тоже исчезает. Почему это? Спасибо. - person user1424139; 31.05.2012
comment
Что вы должны сделать, так это использовать BufferedWriter и закрыть файл после того, как вы полностью закончите, вместо того, чтобы сбрасывать его после каждой строки. - person Louis Wasserman; 31.05.2012

PrintWriter проглатывает все исключения. Если вы не проявляете большую осторожность при проверке ошибок каждый раз, когда вызываете его, и не готовы не знать, что это за ошибки на самом деле, его обычно не следует использовать в сети, где вам нужно знать обо всех исключениях. Используйте BufferedWriter.

person user207421    schedule 31.05.2012