[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-i-o-nio-kakie-klassy-pozvolyayut-preobrazovat-baytovye-potoki-v-simvolnye-i-obratno":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":18,"progress":19,"seo":20},670,"kakie-klassy-pozvolyayut-preobrazovat-baytovye-potoki-v-simvolnye-i-obratno",15,"i-o-nio","I\u002FO & NIO","📁","Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?","Преобразование между байтовыми и символьными потоками выполняют два класса-моста из пакета `java.io`.\n\n`OutputStreamWriter` — мост от символьного потока к байтовому. Принимает `OutputStream` и преобразует символы (char) в байты при записи, используя указанную кодировку. Если кодировка не указана, используется кодировка по умолчанию системы.\n\n`InputStreamReader` — мост от байтового потока к символьному. Принимает `InputStream` и преобразует байты в символы (char) при чтении, используя указанную кодировку.\n\n### Пример с явным указанием кодировки\n\n```java\n\u002F\u002F Чтение: байтовый поток -> символьный\ntry (Reader reader = new InputStreamReader(\n        new FileInputStream(\"data.txt\"), StandardCharsets.UTF_8)) {\n    int ch;\n    while ((ch = reader.read()) != -1) {\n        System.out.print((char) ch);\n    }\n}\n\n\u002F\u002F Запись: символьный поток -> байтовый\ntry (Writer writer = new OutputStreamWriter(\n        new FileOutputStream(\"output.txt\"), StandardCharsets.UTF_8)) {\n    writer.write(\"Текст в UTF-8\");\n}\n```\n\nНа практике явное указание кодировки критически важно для кроссплатформенных приложений. Без указания кодировки Java использует системную кодировку по умолчанию, которая может различаться между ОС (UTF-8 на Linux, Windows-1251 на Windows), что приводит к искажению текста.\n\nКлассы `FileReader` и `FileWriter` до Java 11 были просто обёртками над `InputStreamReader`\u002F`OutputStreamWriter` с кодировкой по умолчанию. Начиная с Java 11 у них появились конструкторы, принимающие `Charset`.\n\n> **На собеседовании:** назовите два класса-моста и подчеркните важность явного указания кодировки. Распространённая ошибка — полагаться на системную кодировку.","","junior",[15,16,17],"core","основы","io",[],null,{"title":21,"description":22,"ogTitle":23,"ogDescription":24,"keywords":25,"schemaAnswer":36,"featuredSnippetReady":37},"Преобразование байтовых потоков в символьные — Gymterview","InputStreamReader и OutputStreamWriter — мосты между байтовыми и символьными потоками Java. Явное указание кодировки, примеры, частые ошибки.","InputStreamReader и OutputStreamWriter — мосты потоков Java — Gymterview","Как преобразовать байтовый поток в символьный и обратно. InputStreamReader, OutputStreamWriter, явное указание кодировки.",[26,27,28,29,30,31,32,33,34,35],"InputStreamReader","OutputStreamWriter","кодировка","UTF-8","Charset","байтовые потоки","символьные потоки","мост","Java IO","собеседование","InputStreamReader — мост от байтового потока (InputStream) к символьному (Reader), преобразует байты в символы при чтении. OutputStreamWriter — мост от символьного (Writer) к байтовому (OutputStream), преобразует символы в байты при записи. Оба принимают Charset для явного указания кодировки. Без указания используется системная кодировка.",true]