Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Java BufferedOutputStream: эффективная байтовая запись

Java BufferedOutputStream: эффективная байтовая запись

Класс BufferedOutputStream из пакета java.io оборачивает другой OutputStream для ускорения байтового вывода. Буферизация данных в памяти сокращает количество операций записи в базовое устройство, что значительно повышает производительность, особенно для больших файлов.

Он наследуется от абстрактного OutputStream и предоставляет конкретные реализации его методов.


Как работает BufferedOutputStream

Внутренне поток выделяет буфер 8 KiB (8192 байта) по умолчанию. При вызове write() байты сначала помещаются в этот буфер. Только когда буфер заполняется или вызывается flush() / close(), данные сбрасываются в базовый поток.

Так как дисковый I/O затратен, эта стратегия снижает количество обращений и делает байтовую запись заметно быстрее.


Создание BufferedOutputStream

Импортируйте класс и оберните любой OutputStream, обычно FileOutputStream:

FileOutputStream file = new FileOutputStream("output.txt");
BufferedOutputStream buffer = new BufferedOutputStream(file);

Для управления размером буфера передайте второй аргумент:

BufferedOutputStream buffer = new BufferedOutputStream(file, 16384); // 16 KiB буфер

Больший буфер может быть полезен для очень больших записей, но стандартные 8 KiB подходят для большинства сценариев.


Ключевые методы BufferedOutputStream

write()

Пример: запись текста в файл

import java.io.*;

public class Main {
    public static void main(String[] args) {
        String data = "This is a line of text inside the file";
        try (FileOutputStream fos = new FileOutputStream("output.txt");
             BufferedOutputStream bos = new BufferedOutputStream(fos)) {
            bos.write(data.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Программа создаёт output.txt со содержимым:

This is a line of text inside the file

Примечание: String.getBytes() преобразует строку в байтовый массив с использованием кодировки платформы по умолчанию. Для детерминированных результатов укажите кодировку, например data.getBytes(StandardCharsets.UTF_8).


flush()

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

BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write(data.getBytes());
bos.flush(); // гарантирует отправку данных

close()

Закрывает поток, сбрасывая оставшиеся данные и освобождая системные ресурсы. После close() поток нельзя использовать снова.


Полный справочник: BufferedOutputStream API.

java

  1. Ключевое слово final в Java: переменные, методы и классы
  2. Оператор instanceof в Java: полное руководство с примерами
  3. Наследование в Java: концепции, типы и практические примеры
  4. Статические вложенные классы в Java: использование, отличия и примеры
  5. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  6. Паттерн Singleton в Java: как реализовать и безопасно использовать
  7. Рефлексия в Java: инспекция классов, методов и полей во время выполнения
  8. Освоение Java ObjectOutputStream: сериализация, методы и практические примеры
  9. Освоение Java Generics: создание переиспользуемого, типобезопасного кода
  10. Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление