Выходные потоки (Output Streams)

Поток вывода передает данные из программы Java в целевой ресурс (файл, консоль, сеть и т.д.), то есть выполняет запись.

OutputStream – абстрактный базовый класс всех байтовых выходных потоков (для записи бинарных данных).

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

Примеры выходных потоков: FileOutputStream (запись в файл), ByteArrayOutputStream (запись в массив байт в памяти), System.out (вывод в консоль, стандартный вывод).

Пояснение:
Выходные потоки используются для записи данных из программы во внешние приемники. Так же как и с вводом, Java имеет множество классов вывода: байтовые (наследники OutputStream) для записи сырых байтов и символьные (наследники Writer) для записи текстовой информации. Если нужно записать текстовую информацию (строки, символы) в файл или сеть, удобнее использовать классы Writer – они самостоятельно перекодируют символы в байты. Например, FileWriter можно использовать для записи текста в файл (внутри он использует OutputStreamWriter с кодировкой по умолчанию), а PrintWriter и BufferedWriter дают дополнительные возможности буферизации и форматированного вывода.
 
Базовый класс OutputStream определяет методы для отправки байтов, основной – void write(int b), который записывает один байт (младшие 8 бит аргумента b). Также есть методы write(byte[] b) и write(byte[] b, int off, int len) для записи сразу массива байтов или его части. При работе с выходными потоками следует помнить про буферизацию: некоторые потоки накапливают записываемые данные во внутреннем буфере, и фактическая запись во внешний ресурс (например, на диск) может происходить не сразу. Поэтому существует метод flush() – он принудительно проталкивает накопленные данные из буфера в целевой поток. Закрытие выходного потока через close() автоматически вызывает flush(), поэтому в простых случаях явный вызов flush() не требуется (достаточно закрыть поток или выйти из блока try-with-resources). Однако, если поток остается открытым длительное время и важно, чтобы данные дошли до получателя немедленно (например, в сетевом соединении или при логировании), то можно вызывать flush() вручную.
 
Рассмотрим пример использования FileOutputStream для записи данных в файл. В следующем коде мы создаем файл output.bin и записываем в него последовательность байтов от 0 до 9:
import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;
try (OutputStream output = new FileOutputStream("output.bin")) {
    for (int b = 0; b < 10; b++) {
        output.write(b);  // записываем байт (значения 0,1,2,...9)
    }
    // Можно вызвать output.flush(), чтобы убедиться, что все данные записаны.
    // В данном случае закрытие потока выполнит flush автоматически.
} catch (IOException e) {
    e.printStackTrace();
}
Этот код создаст (или перезапишет, если существует) файл output.bin и запишет в него 10 байт. Мы используем try-with-resources, поэтому output.close() будет вызван автоматически в конце блока. Метод write(b) в цикле пишет по одному байту. Если нужно записывать текст, вместо FileOutputStream стоит использовать FileWriter или OutputStreamWriter с указанием нужной кодировки, иначе байты могут не правильно отобразить символы. Например, для записи строки в файл с кодировкой UTF-8 можно сделать так:
import java.io.OutputStreamWriter;import java.nio.charset.StandardCharsets;// ...try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("text.txt"), StandardCharsets.UTF_8)) {
    writer.write("Привет, мир!");
    // BufferedWriter можно использовать для эффективной записи и добавить writer.flush() при необходимости
}
В примере выше мы явно указали кодировку UTF-8 при создании OutputStreamWriter. Это современный подход – задавать кодировку явно, чтобы текст корректно сохранялся вне зависимости от настроек системы.
 
Стоит упомянуть поток System.out. Хотя он объявлен как OutputStream (а точнее, PrintStream, наследник OutputStream), его используют для вывода текста в консоль с помощью методов print()/println(). System.out по умолчанию выводит данные в стандартный вывод (обычно консоль). Запись в System.out не требует открытия или закрытия (этим управляет JVM), но, например, при работе с PrintWriter/PrintStream можно настроить автоматический flush при каждом выводе новой строки.

Автор: к.п.н., Румянцев Сергей Александрович, доцент Финансового университета при Правительстве РФ; доцент ОЧУВО Международного инновационного университета; Консалтинг, управление разработкой ПО; системный и бизнес анализ; менеджмент; аналитиз данных; управление ИТ. Телефон для связи +79269444818 (мессенджеры)   Короткая ссылка:
Поток вывода передает данные из программы Java в целевой ресурс (файл, консоль, сеть и т.д.), то есть выполняет запись.

OutputStream – абстрактный базовый класс всех байтовых выходных потоков (для записи бинарных данных).

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

Примеры выходных потоков: FileOutputStream (запись в файл), ByteArrayOutputStream (запись в массив байт в памяти), System.out (вывод в консоль, стандартный вывод).

Пояснение:
Выходные потоки используются для записи данных из программы во внешние приемники. Так же как и с вводом, Java имеет множество классов вывода: байтовые (наследники OutputStream) для записи сырых байтов и символьные (наследники Writer) для записи текстовой информации. Если нужно записать текстовую информацию (строки, символы) в файл или сеть, удобнее использовать классы Writer – они самостоятельно перекодируют символы в байты. Например, FileWriter можно использовать для записи текста в файл (внутри он использует OutputStreamWriter с кодировкой по умолчанию), а PrintWriter и BufferedWriter дают дополнительные возможности буферизации и форматированного вывода.
 
Базовый класс OutputStream определяет методы для отправки байтов, основной – void write(int b), который записывает один байт (младшие 8 бит аргумента b). Также есть методы write(byte[] b) и write(byte[] b, int off, int len) для записи сразу массива байтов или его части. При работе с выходными потоками следует помнить про буферизацию: некоторые потоки накапливают записываемые данные во внутреннем буфере, и фактическая запись во внешний ресурс (например, на диск) может происходить не сразу. Поэтому существует метод flush() – он принудительно проталкивает накопленные данные из буфера в целевой поток. Закрытие выходного потока через close() автоматически вызывает flush(), поэтому в простых случаях явный вызов flush() не требуется (достаточно закрыть поток или выйти из блока try-with-resources). Однако, если поток остается открытым длительное время и важно, чтобы данные дошли до получателя немедленно (например, в сетевом соединении или при логировании), то можно вызывать flush() вручную.
 
Рассмотрим пример использования FileOutputStream для записи данных в файл. В следующем коде мы создаем файл output.bin и записываем в него последовательность байтов от 0 до 9:
import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;
try (OutputStream output = new FileOutputStream("output.bin")) {
    for (int b = 0; b < 10; b++) {
        output.write(b);  // записываем байт (значения 0,1,2,...9)
    }
    // Можно вызвать output.flush(), чтобы убедиться, что все данные записаны.
    // В данном случае закрытие потока выполнит flush автоматически.
} catch (IOException e) {
    e.printStackTrace();
}
Этот код создаст (или перезапишет, если существует) файл output.bin и запишет в него 10 байт. Мы используем try-with-resources, поэтому output.close() будет вызван автоматически в конце блока. Метод write(b) в цикле пишет по одному байту. Если нужно записывать текст, вместо FileOutputStream стоит использовать FileWriter или OutputStreamWriter с указанием нужной кодировки, иначе байты могут не правильно отобразить символы. Например, для записи строки в файл с кодировкой UTF-8 можно сделать так:
import java.io.OutputStreamWriter;import java.nio.charset.StandardCharsets;// ...try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("text.txt"), StandardCharsets.UTF_8)) {
    writer.write("Привет, мир!");
    // BufferedWriter можно использовать для эффективной записи и добавить writer.flush() при необходимости
}
В примере выше мы явно указали кодировку UTF-8 при создании OutputStreamWriter. Это современный подход – задавать кодировку явно, чтобы текст корректно сохранялся вне зависимости от настроек системы.
 
Стоит упомянуть поток System.out. Хотя он объявлен как OutputStream (а точнее, PrintStream, наследник OutputStream), его используют для вывода текста в консоль с помощью методов print()/println(). System.out по умолчанию выводит данные в стандартный вывод (обычно консоль). Запись в System.out не требует открытия или закрытия (этим управляет JVM), но, например, при работе с PrintWriter/PrintStream можно настроить автоматический flush при каждом выводе новой строки.

https://webprogr.ru/~JDHdW
Короткая ссылка на новость:https://webprogr.ru/~JDHdW


Последние новости

Выходные потоки (Output Streams)

Поток вывода передает данные из программы Java в целевой ресурс (файл, консоль, сеть и т.д.), то есть выполняет запись.

OutputStream – абстрактный базовый класс всех байтовых выходных потоков (для записи бинарных данных).

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

Примеры выходных потоков: FileOutputStream (запись в файл), ByteArrayOutputStream (запись в массив байт в памяти), System.out (вывод в консоль, стандартный вывод).

Пояснение:
Выходные потоки используются для записи данных из программы во внешние приемники. Так же как и с вводом, Java имеет множество классов вывода: байтовые (наследники OutputStream) для записи сырых байтов и символьные (наследники Writer) для записи текстовой информации. Если нужно записать текстовую информацию (строки, символы) в файл или сеть, удобнее использовать классы Writer – они самостоятельно перекодируют символы в байты. Например, FileWriter можно использовать для записи текста в файл (внутри он использует OutputStreamWriter с кодировкой по умолчанию), а PrintWriter и BufferedWriter дают дополнительные возможности буферизации и форматированного вывода.
 
Базовый класс OutputStream определяет методы для отправки байтов, основной – void write(int b), который записывает один байт (младшие 8 бит аргумента b). Также есть методы write(byte[] b) и write(byte[] b, int off, int len) для записи сразу массива байтов или его части. При работе с выходными потоками следует помнить про буферизацию: некоторые потоки накапливают записываемые данные во внутреннем буфере, и фактическая запись во внешний ресурс (например, на диск) может происходить не сразу. Поэтому существует метод flush() – он принудительно проталкивает накопленные данные из буфера в целевой поток. Закрытие выходного потока через close() автоматически вызывает flush(), поэтому в простых случаях явный вызов flush() не требуется (достаточно закрыть поток или выйти из блока try-with-resources). Однако, если поток остается открытым длительное время и важно, чтобы данные дошли до получателя немедленно (например, в сетевом соединении или при логировании), то можно вызывать flush() вручную.
 
Рассмотрим пример использования FileOutputStream для записи данных в файл. В следующем коде мы создаем файл output.bin и записываем в него последовательность байтов от 0 до 9:
import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;
try (OutputStream output = new FileOutputStream("output.bin")) {
    for (int b = 0; b < 10; b++) {
        output.write(b);  // записываем байт (значения 0,1,2,...9)
    }
    // Можно вызвать output.flush(), чтобы убедиться, что все данные записаны.
    // В данном случае закрытие потока выполнит flush автоматически.
} catch (IOException e) {
    e.printStackTrace();
}
Этот код создаст (или перезапишет, если существует) файл output.bin и запишет в него 10 байт. Мы используем try-with-resources, поэтому output.close() будет вызван автоматически в конце блока. Метод write(b) в цикле пишет по одному байту. Если нужно записывать текст, вместо FileOutputStream стоит использовать FileWriter или OutputStreamWriter с указанием нужной кодировки, иначе байты могут не правильно отобразить символы. Например, для записи строки в файл с кодировкой UTF-8 можно сделать так:
import java.io.OutputStreamWriter;import java.nio.charset.StandardCharsets;// ...try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("text.txt"), StandardCharsets.UTF_8)) {
    writer.write("Привет, мир!");
    // BufferedWriter можно использовать для эффективной записи и добавить writer.flush() при необходимости
}
В примере выше мы явно указали кодировку UTF-8 при создании OutputStreamWriter. Это современный подход – задавать кодировку явно, чтобы текст корректно сохранялся вне зависимости от настроек системы.
 
Стоит упомянуть поток System.out. Хотя он объявлен как OutputStream (а точнее, PrintStream, наследник OutputStream), его используют для вывода текста в консоль с помощью методов print()/println(). System.out по умолчанию выводит данные в стандартный вывод (обычно консоль). Запись в System.out не требует открытия или закрытия (этим управляет JVM), но, например, при работе с PrintWriter/PrintStream можно настроить автоматический flush при каждом выводе новой строки.

Рейтинг@Mail.ru