English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Учебник по основам Java

Java управление потоком

Java массив

Java面向对象(I)

Java面向对象(II)

Java面向对象(III)

Обработка исключений в Java

Java список (List)

Java Queue (очередь)

Java Map наборы

Java Set наборы

Java Ввод/вывод (I/O)

Java Reader/Writer

Другие темы Java

Класс Java BufferedOutputStream

В этом руководстве мы будем изучать Java BufferedOutputStream и его методы с помощью примеров

Класс BufferedOutputStream из пакета java.io используется вместе с другими потоками вывода для более эффективной записи данных (в байтах)

Он наследует абстрактный класс OutputStream

Работа BufferedOutputStream

BufferedOutputStream поддерживает8192 байтвнутреннего буфера.

Во время операции записи байты записываются в внутренний буфер, а не на диск. Как только буфер заполняется или поток закрывается, весь буфер записывается на диск

Таким образом, уменьшается количество коммуникаций с диском. Это именно поэтому запись байтов с использованием BufferedOutputStream происходит быстрее

Создание BufferedOutputStream

Чтобы создать BufferedOutputStream,我们必须 сначала импортировать пакет java.io.BufferedOutputStream. После импорта пакета мы можем создать поток вывода

// Создание FileOutputStrean
FileOutputStream file = new FileOutputStream(String path);
//Создать BufferedOutputStream
BufferedOutputStream buffer = new BufferedOutputStream(file);

В предыдущем примере мы создали BufferedOutputStream с именем buffer, используя FileOutputStream с именем file

Здесь размер внутреннего буфера по умолчанию составляет 8192 байта. Однако, мы также можем определить размер внутреннего буфера

// Создает BufferedOutputStream с заданным размером внутреннего буфера
BufferedOutputStream buffer = new BufferedOutputStream(file, int size);

Этот буфер поможет быстрее записывать байты в файл

Методы BufferedOutputStream

Класс BufferedOutputStream предоставляет реализацию различных методов класса OutputStream

Метод write()

  • write() - Записывает один байт в внутренний буфер потока вывода

  • write(byte[] array) - Записывает байты из указанного массива в поток вывода

  • write(byte[] arr, int start, int length) - Записывает равное length байт из массива arr в поток вывода начиная с позиции start

Пример: BufferedOutputStream записывает данные в файл

import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
public class Main {
    public static void main(String[] args) {
        String data = "This is a line of text inside the file";
        try {
            // Создание FileOutputStrean
            FileOutputStream file = new FileOutputStream("output.txt");
            //Создать BufferedOutputStream
            BufferedOutputStream output = new BufferedOutputStream(file);
            byte[] array = data.getBytes();
            //Записать данные в поток вывода
            output.write(array);
            output.close();
        }
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

В примере выше мы создали буферный поток output и FileOutputStream. Поток вывода связан с файлом output.txt.

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

Чтобы записать данные в файл, мы используем метод write().

Здесь, когда мы запускаем программу,output.txtФайл будет записан с содержимым.

This is a line of text inside the file.

Внимание:В программе используется метод getBytes() для преобразования строки в массив байтов.

Метод flush()

Чтобы удалить внутренний буфер, мы можем использовать метод flush(). Этот метод принудительно записывает все данные из буфера в целевой файл. Например,

import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
public class Main {
    public static void main(String[] args) {
        String data = "This is a demo of the flush method";
        try {
            // Создание FileOutputStrean
            FileOutputStream file = new FileOutputStream("flush.txt");
            //Создать BufferedOutputStream
            BufferedOutputStream buffer = new BufferedOutputStream(file);
            //Записать данные в поток вывода
            buffer.write(data.getBytes());
            //Протолкнуть данные в цель
            buffer.flush();
            System.out.println("Данные проталкиваются в файл.");
            buffer.close();
        }
        catch(Exception e) {
            e.getStackTrace();
        }
    }
}

Результат вывода

Данные проталкиваются в файл.

Когда мы запускаем программу, файл flush.txt наполняется текстом, представленным строковыми данными.

метод close()

Чтобы закрыть буферированный поток ввода-вывода, мы можем использовать метод close(). После вызова этого метода мы не сможем использовать поток ввода-вывода для записи данных.