можно ли flush для небуферизированного потока и что будет

Можно ли flush() для небуферизированного потока и что будет?

Начинаю изучать тему IO и NIO.

Знаю, что flush() заставляет поток очистить свои внутренние буферы. Не могу понять, можно ли использовать flush() для небуферизированного потока и что будет?

Ответы (2 шт):

Как следует из описания flush() :

This method forces any data that may have been buffered to be written to the underlying output device. Please note that the host environment might perform its own buffering unbeknowst to Java. In that case, a write made (for example, to a disk drive) might be cached in OS buffers instead of actually being written to disk.

В переводе на русский означает, что flush() вызывает чистку буфера вызывая метод реализованный в самой ОС поверх которой работает JVM. При этом даже отсутствие буфера в самом потоке не означает, что не будет использоваться в качестве буфера кэш диска на уровне ОСи или даже ниже.

В общем, flush() является хорошим тоном для любого потока, поскольку, девелопер не знает есть ли буфер на уровне ОС (более того девелопер обычно даже и не знает что за ось будет использована).

Мне кажется ответ уважаемого @Barmaley не корректен. Это мое оценочное суждение)

This method forces any data that may have been buffered to be written to the underlying output device. Please note that the host environment might perform its own buffering unbeknowst to Java. In that case, a write made (for example, to a disk drive) might be cached in OS buffers instead of actually being written to disk.

Мое понимание процитированной документации, что вызов метода flush() гарантирует только то, что байты, ранее записанные в поток, передаются операционной системе для записи, но не гарантирует записи на диск. Вот ссылка на верный по моему мнению ответ: FileOutputStream: Does the “close” method calls also “flush”?

Читайте также:  неовен или детралекс что лучше при варикозе

Источник

Можно ли flush() для небуферизированного потока и что будет?

Начинаю изучать тему IO и NIO.

Знаю, что flush() заставляет поток очистить свои внутренние буферы. Не могу понять, можно ли использовать flush() для небуферизированного потока и что будет?

2 ответа 2

Как следует из описания flush() :

This method forces any data that may have been buffered to be written to the underlying output device. Please note that the host environment might perform its own buffering unbeknowst to Java. In that case, a write made (for example, to a disk drive) might be cached in OS buffers instead of actually being written to disk.

В переводе на русский означает, что flush() вызывает чистку буфера вызывая метод реализованный в самой ОС поверх которой работает JVM. При этом даже отсутствие буфера в самом потоке не означает, что не будет использоваться в качестве буфера кэш диска на уровне ОСи или даже ниже.

В общем, flush() является хорошим тоном для любого потока, поскольку, девелопер не знает есть ли буфер на уровне ОС (более того девелопер обычно даже и не знает что за ось будет использована).

Мне кажется ответ уважаемого @Barmaley не корректен. Это мое оценочное суждение)

This method forces any data that may have been buffered to be written to the underlying output device. Please note that the host environment might perform its own buffering unbeknowst to Java. In that case, a write made (for example, to a disk drive) might be cached in OS buffers instead of actually being written to disk.

Мое понимание процитированной документации, что вызов метода flush() гарантирует только то, что байты, ранее записанные в поток, передаются операционной системе для записи, но не гарантирует записи на диск. Вот ссылка на верный по моему мнению ответ: FileOutputStream: Does the “close” method calls also “flush”?

Читайте также:  на что крепить отливы на пластиковые окна

Источник

Когда использовать flush () в java?

у меня есть несколько вопросов в приведенном выше примере.

6 ответов

когда использовать метод flush и почему мы ее используем?

что делает метод close нести счет здесь?

Я не уверен, что вы подразумеваете под ‘нести результат, но close метод окончательно закрывает ресурсы (входной сигнал или выход), он выпускает например ручки файла. Ты всегда должен звонить. закрыть в finally блок для очистки всех ссылок, которые может иметь ОС.

каковы альтернативы сериализации или сохранения данных в Ява. Я не хочу, чтобы данные в файл как поток байтов.

у вас есть несколько вариантов. Для клиентского приложения вы можете использовать XML, JSON или облегченную базу данных, такую как SQLlite. На стороне сервера вы также можете взглянуть на более надежные базы данных (например, MySQL).

это используется, когда должна быть синхронная отправка

например, у вас есть дуплексное (двухстороннее) соединение, и вы только что отправили сообщение, и теперь вам нужно дождаться ответа на него, без промывки буферизованный outputstream может удерживать его, пока буфер не заполнится (тупик)

неправильно! Вы читаете некоторые данные из потока typecast его в Джон (который будет бросать, если объект read не был Джоном)

вы можете написать его как текст (напишите поля как текст на строке) и предоставить метод для разбора его на объект

есть несколько вопросов в приведенном выше примере.

когда использовать метод flush и почему мы ее используем?

что делает метод close нести счет здесь?

какие альтернативы Сериализация и сохранение данных в Java. Я не хочу, чтобы данные в файл как поток байтов.

вы можете изучить другие подходы сериализации/маршалинга, такие как кинокомпании xStream, JSON или сверните свой собственный (сложный, только сделайте это, если у вас есть веская причина). Большинство из них окажутся более сложными, чем встроенная сериализация, поэтому убедитесь, что у вас есть веская причина не просто написать «itno-файл как байтовый поток».

Читайте также:  монетизация что это в ютубе

1) чтобы убедиться, что все возможные буферизованные байты записаны. Вижу Ява.Ио.Клиенту OutputStream.врезная().

3) Вы не читаете объект file. Вы читаете ранее сериализованный объект Java из файла. Надеюсь, этот объект будет типа John, иначе вы получите Исключение ClassCastException. Это будет тип John, как вы ранее называли » oos.writeObject (myObj)», где myObj имеет тип John.

4) Google для сериализации Java-объектов. Существует множество библиотек для сериализации объектов Java в двоичные файлы, xml, json и т. д. Сам JDK поставляется с одним под названием XMLEncoder.

функция Flush заключается в том, чтобы явно попросить Java-программу записать что-то на диск, что означает выполнение ввода-вывода. Скажем, если мы используем bufferedOutputStream, когда мы пишем («что-то»), он сохраняется в буфере, но еще не на диске. Когда вы вызываете flush, он будет записывать материалы в буфер на диск. Обычно вам не нужно вызывать флеш самостоятельно, потому что для этого требуется IO и снизить скорость. Поток будет автоматически промыть, когда буфер заполнен. Если вы не хотите, содержимое обновляется на диск, вы можете использовать flush.

извините, не понял ваш вопрос? какой счет?

это то, что делает сериализация, она позволяет хранить некоторый объект в вашей файловой системе и возвращать его. Вы читаете поток байтов и преобразуете его обратно в объект.

есть много способов (xml, база данных, txt-файл), напишите свой собственный формат для хранения данных в локальном файле или в базе данных. Позвольте мне привести ваш пример, Джон. Он имеет имя и атрибуты отдела. Вы можете написать вывод формата, который принимает экземпляр John, и сделать следующее.

клиенту OutputStream.написать («класс John\n»); клиенту OutputStream.write («toString:»+instance+ » \n»); клиенту OutputStream.close();

затем он сохранит как локальный txt-файл, который вы можете открыть и прочитать.

Источник

Строительный портал