Что именно означает "поток" и "буфер" в Java I/O?



Я только что узнал о вводе / выводе с помощью BufferedReader.



Я хотел бы знать, что именно означает термин Stream и Buffer?



кроме того, что эта строка кода служит нам:



BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
1138   5  

5 ответов:

Java имеет два вида классов для ввода и вывода (I / O): потоки и читатели/писатели.

потоки (InputStream,OutputStream и все, что расширяет их) предназначены для чтения и записи двоичных данных из файлов, сети или любого другого устройства.

читатели и писатели предназначены для чтения и написания текста (символов). Они представляют собой слой поверх потоков, который преобразует двоичные данные (байты) в символы и обратно, используя кодировка.

чтение данных с диска байт за байтом очень неэффективно. Один из способов ускорить это - использовать буфер: вместо того, чтобы читать по одному байту за раз, Вы читаете несколько тысяч байтов сразу и помещаете их в буфер, в память. Затем вы можете посмотреть на байты в буфере один за другим.

Java-учебник Oracle о I/О объясняет это в деталях.

глядя на строку кода Вы при условии:

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

System.in - это InputStream. Вы создаете InputStreamReader, который считывает байт из System.in. Тогда вы оберните это в BufferedReader.

так, в конце концов, у вас есть BufferedReader что говорится в InputStreamReader это читает от System.in.

ну его вопрос в everbodys ума, которые начинают работать на java.io пакет. Чтобы ответить на ваш вопрос термины InputStreamReader и BufferedReader представляют только объекты java (в них нет ничего особенного), но они созданы для операций ввода-вывода, таких как чтение и запись с/на разные входы/выходы, такие как файл, объект и т. д.

теперь давайте перейдем к строке

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

InputStreamReader-это класс для чтения входного потока байтов.Но читать каждый байт дорогостоящая операция, поэтому мы обертываем ее вокруг BufferedReader, чтобы она была буферизована (что является шаблоном декоратора)

Так что произойдет еще до того, как вы начнете читать, bufferedReader будет хранить некоторый кусок байтов в регистре и при выполнении операции чтения. он будет считываться из этого места, что намного дешевле, чем чтение из консоли/файла, но в случае InputStreamReader, когда вы выполняете операцию чтения каждый раз, когда происходит операция доступа к диску

буфера:

это края физическая память используется для временного хранения данных во время перемещения из одного места в другое. Это физической памяти будет RAM (оперативная память) в большинстве случаев.

но из контекста этого вопроса, буфер используется при чтении/записи данных. Его не нужно использовать при перемещении данных из одного места в другое.

пример для буфера: если ваша система имеет 4 ГБ оперативной памяти, 4 КБ памяти (ОЗУ) может быть выделено для буфер система. КБ-килобайт(ы), ГБ - гигабайт (Ы)

Поток Ввода/Вывода (или) потока:

Поток Ввода/Вывода представляет источник входного сигнала или назначение выхода. Поток может представлять много различных видов источников и направлений, включая дисковые файлы, устройства, другие программы и массивы памяти.

I / O означает вход / выход.

так, входной поток может быть источником входного сигнала как файл диска, сетевое соединение, ЕТК.

и выходной поток может быть выходным местом, таким как дисковый файл, сетевое подключение и т. д.

по данным официальная документация JAVA, потоки 3 типы.

  1. Байтовых Потоков (чтение или запись байтов)
  2. Потоки Символов (чтение или запись символов)
  3. Буферизованные Потоки (читать или писать,буфер эффективности)

Байтовых Потоков:

они выполняют ввод и вывод 8-разрядных байтов. Все классы потока байтов являются потомками InputStream и OutputStream.

классы входного потока байта получают входной сигнал как необработанные байты. Классы выходного потока байтов дают выход как необработанные байты.

InputStream -Прямые Известные Подклассы

AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream.

OutputStream -Прямые Известные Подклассы

ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream

Характер Потоков: Они представляют собой слой поверх байта Потоки. Они преобразуют байты (двоичные данные) в символы и символы в байты, используя кодировку символов.

все классы символьного потока происходят от читатель и писатель.

Reader - Прямые Известные Подклассы

BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader

Writer - Прямые Известные Подклассы

BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter

Потоки Байтов И Символьные Потоки использовать unbuffered I / O.

это означает, что каждый запрос на чтение или запись обрабатывается непосредственно базовой ОС. Это может сделать программу намного меньше эффективный, так как каждый такой запрос часто запускает доступ к диску, сеть деятельность или какая-то другая операция, которая является относительно дорогой. Чтобы уменьшить этот вид накладных расходов, платформа Java реализует буферизацию Потоки ввода / вывода.

Буферизованных Потоков:

Буферизованная входные потоки чтение данных из область памяти, известную как буфер; собственный входной API вызывается только тогда, когда буфер пуст.

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

программа может конвертировать unbuffered трансляция в буферизованный поток использование идиомы обертывания, где же unbuffered объект stream передается конструктору для буферизованный класса Stream.

пример:

inputStream = new BufferedReader(new FileReader("xanadu.txt"));
outputStream = new BufferedWriter(new FileWriter("characteroutput.txt"));

существует 4 класса буферизованных потоков, которые используются для обертывания небуферизованных потоков:

создать буферизованныйБайтовых Потоков использовать BufferedInputStream и BufferedOutputStream классы.

создать буферизованный Потоки Символов использовать BufferedReader и BufferedWriter классы.

потоки: потоки-это потоки данных, которые можно читать или записывать. потоки обычно подключаются к источнику данных или месту назначения данных, например файлу, сетевому соединению и т. д.

буфер: контейнер для данных определенного типа примитива. Буфер-это линейная, конечная последовательность элементов определенного примитивного типа. Помимо его содержания, основными свойствами буфера являются его емкость, предел и положение:

поток-это соединение и фактическая информация, передаваемая между точками. Буфер представляет собой контейнер для хранения, который хранит часть или все потоковые данные и передает их на устройство вывода.

конечно, дело в том, что если поток замедляется за пределы скорости передачи данных, необходимой для отображения данных, то вывод будет приостановлен. Буфер предотвращает это.

Comments

    Ничего не найдено.