Java IO - большая точка знания.
Если вы сломаете его знания и поговорите об этом, это, вероятно, будет неделя. Для системы iO вы можете взглянуть на следующую картину.
Далее, давайте начнем с куска кода, давайте посмотрим на следующий код
открытый тест класса {public static void main (string [] args) выбрасывает exception {file file = new File ("text.txt"); if (! file.exists ()) {file.createnewfile (); } FileOutputStream fos = new FileOutputStream (file); BufferedOutputStream Bos = new BufferedOutputStream (FOS); байт [] b = новый байт [1024]; Bos.write (b); bos.flush (); }} Забуференный поток построен в коде, а затем данные длины КБ записываются в поток, и, наконец, вызывается метод flush ().
Это очень простой кусок кода, и окончательный вывод состоит в том, чтобы сгенерировать файл текста 1KB Text.Text.
Но если мы прокомментируем последнюю строку
//bos.flush ();
Окончательный сгенерированный текст. Размер текста станет 0.
Этот результат очень очевиден, но если мы изменим flush () на Close (), будет ли результат все еще 0?
О флеш
Flush () фактически обнаружен в сетевой передаче давным -давно
В то время, для эффективности, сервер и клиент не будут передавать кусок данных каждый раз, когда он был сгенерирован.
Вместо этого будет создан буфер, и данные будут переданы клиенту после заполнения буфера.
Иногда есть такая проблема. Когда данных недостаточно для заполнения буфера, и данные должны передаваться клиенту, чтобы решить эту проблему, существует концепция промывки, и данные буфера вынуждены быть отправлены.
Возвращаясь к вышеуказанному вопросу, возможно ли заменить промывку с близким
Ответ да.
Если вы посмотрите на исходный код, вы узнаете о отношениях наследования BufferedOutputStream
Общедоступный класс BufferOutputStream Extends FilterOutputStream
BufferedOutputStream не реализует метод Close (), поэтому он будет непосредственно вызовом Close () FilterOutputStream, а метод Close () FilterOutputStream вызовет flound () для вывода данных буфера.
В реальном развитии, в отношении операций ввода -вывода, подчеркивается, что метод Close () должен быть вызван в конце. Приведенный выше пример является одной из причин.