> For the complete documentation index, see [llms.txt](https://kaze.gitbook.io/qa-theory/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kaze.gitbook.io/qa-theory/osnovy-programmirovaniya-na-java/klassy-vvoda-vyvoda.md).

# Классы ввода-вывода

Классы ввода-вывода (input-output, I/O) в Java предоставляют мощные средства для работы с потоками данных ввода и вывода. Они позволяют читать данные из различных источников (например, файлов, сетевых соединений, системных ресурсов) и записывать данные в различные места назначения.

1. **InputStream / OutputStream**:
   * `InputStream` и `OutputStream` являются абстрактными классами для чтения и записи байтов соответственно.
   * Они предоставляют базовые методы для чтения и записи байтов из и в потоки.
2. **Reader / Writer**:
   * `Reader` и `Writer` являются абстрактными классами для чтения и записи символов соответственно.
   * Они предоставляют методы для чтения и записи символов, обеспечивая автоматическую конвертацию байтов в символы и обратно, используя определенную кодировку.
3. **FileInputStream / FileOutputStream**:
   * `FileInputStream` и `FileOutputStream` используются для чтения и записи данных из/в файлы на диске.
4. **FileReader / FileWriter**:
   * `FileReader` и `FileWriter` предоставляют удобные методы для чтения и записи символов в файлы.
5. **BufferedInputStream / BufferedOutputStream**:
   * `BufferedInputStream` и `BufferedOutputStream` оборачивают другие потоки для буферизации ввода-вывода, что повышает производительность при работе с небольшими порциями данных.
6. **BufferedReader / BufferedWriter**:
   * `BufferedReader` и `BufferedWriter` предоставляют буферизованное чтение и запись символов, что может быть полезно при работе с текстовыми данными.
7. **ObjectInputStream / ObjectOutputStream**:
   * `ObjectInputStream` и `ObjectOutputStream` предоставляют возможность сериализации и десериализации объектов Java.
