Я использую BufferedWriter
с размером по умолчанию 8192 символов для записи строк в локальный файл. Строки считываются из входного потока сокета с помощью метода BufferedReader
readLine, блокируя ввод-вывод.
Средняя длина строки составляет 50 символов. Все это работает хорошо и достаточно быстро (более 1 млн строк в секунду), однако, если клиент перестанет писать, строки, которые сейчас хранятся в буфере BufferedWriter
, не будут сброшены на диск. Фактически буферизованные символы не будут сброшены на диск до тех пор, пока клиент не возобновит запись или соединение не будет закрыто. Это приводит к задержке между передачей строки времени клиентом и временем фиксации этой строки в файле, поэтому задержка с длинным хвостом увеличивается.
Есть ли способ сбросить неполный буфер BufferedWriter
по тайм-ауту, например. в течение 100 миллисекунд?
BufferedWriter
после каждой написанной строки? - person copeg   schedule 02.06.2015