[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-i-o-nio-kakie-klassy-pozvolyayut-uskorit-chtenie-zapis-za-schet-ispolzovaniya-bufera":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":19,"progress":20,"seo":21},671,"kakie-klassy-pozvolyayut-uskorit-chtenie-zapis-za-schet-ispolzovaniya-bufera",15,"i-o-nio","I\u002FO & NIO","📁","Какие классы позволяют ускорить чтение\u002Fзапись за счет использования буфера?","Буферизованные потоки накапливают данные во внутреннем массиве (буфере) и выполняют операции ввода\u002Fвывода блоками, а не побайтно\u002Fпосимвольно, что значительно сокращает количество системных вызовов.\n\n> Аналогия из жизни: без буфера — это как носить воду из колодца по одному стакану. С буфером — вы берёте ведро, наполняете его у колодца и затем используете воду из ведра, ходя к колодцу в разы реже.\n\n### Буферизованные классы\n\n| Класс | Оборачивает | Конструкторы |\n|---|---|---|\n| `BufferedInputStream` | `InputStream` | `(InputStream in)`, `(InputStream in, int size)` |\n| `BufferedOutputStream` | `OutputStream` | `(OutputStream out)`, `(OutputStream out, int size)` |\n| `BufferedReader` | `Reader` | `(Reader in)`, `(Reader in, int sz)` |\n| `BufferedWriter` | `Writer` | `(Writer out)`, `(Writer out, int sz)` |\n\nРазмер буфера по умолчанию — 8192 байт (8 КБ) для байтовых и 8192 символов для символьных потоков. Для файлов размером в несколько мегабайт и выше можно увеличить буфер до 32-64 КБ для повышения производительности.\n\n`BufferedReader` добавляет метод `readLine()` для построчного чтения и `lines()` для получения `Stream\u003CString>`. `BufferedWriter` добавляет метод `newLine()` для вставки платформо-зависимого символа перевода строки.\n\n### Важный нюанс\n\nПри использовании `BufferedOutputStream` или `BufferedWriter` данные могут оставаться в буфере и не быть записаны на диск. Для гарантии записи необходимо вызвать `flush()` или закрыть поток через `close()` (который вызывает `flush()` автоматически).\n\n> **На собеседовании:** назовите четыре буферизованных класса и поясните принцип — замена множества мелких системных вызовов одним крупным. Бонус — упомянуть размер буфера по умолчанию (8 КБ) и необходимость flush.","","junior",[15,16,17,18],"core","performance","основы","io",[],null,{"title":22,"description":23,"ogTitle":24,"ogDescription":25,"keywords":26,"schemaAnswer":37,"featuredSnippetReady":38},"Буферизованные потоки Java — Gymterview","BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter: буферизация ввода\u002Fвывода, размер буфера по умолчанию, readLine(), flush().","Буферизованные потоки в Java — Gymterview","Четыре буферизованных класса Java IO. Размер буфера, readLine(), flush() и принцип снижения системных вызовов.",[27,28,29,30,31,32,33,34,35,36],"BufferedInputStream","BufferedOutputStream","BufferedReader","BufferedWriter","буферизация","flush","readLine","производительность","Java IO","собеседование","BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter. Накапливают данные во внутреннем буфере (по умолчанию 8 КБ) и выполняют операции блоками, сокращая количество системных вызовов. BufferedReader добавляет readLine() и lines() (Stream API). Размер буфера настраивается в конструкторе. Для гарантии записи нужен flush() или close().",true]