Шаг 92.
Язык программирования Java.
Класс ByteArrayOutputStream

На этом шаге мы рассмотрим класс ByteArrayOutputStream

Класс ByteArrayOutputStream реализует поток вывода, использующий массив байтов в качестве адресата. В классе ByteArrayOutputStream имеются два конструктора, как показано ниже:

ByteArrayOutputStream();
ByteArrayOutputStream(int count);

В первой форме конструктора создается буфер размером 32 байта, а во второй форме – буфер, размер которого составляет заданное количество байтов count. Этот буфер хранится в защищенном поле buf класса ByteArrayOutputStream. Размер буфера увеличивается автоматически по мере необходимости. Количество байтов, содержащихся в буфере, хранится в защищенном поле count класса ByteArrayOutputStream.

Метод close() не оказывает никакого влияния на класс ByteArrayOutputStream. Поэтому вызывать его для объекта класса ByteArrayOutputStream не нужно, хотя это и не считается ошибкой.

В следующем примере программы демонстрируется применение класса ByteArrayOutputStream.


import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * Пример использования класса ByteArrayOutputStream
 * */

public class Main {
    public static void main(String[] args) {
        String s = "Эти данные должны быть выведены в массив";
        byte[] bytes = s.getBytes();

        /*Конструируем объект типа ByteArrayOutputStream*/
        ByteArrayOutputStream f = new ByteArrayOutputStream();

        /*Записываем в поток вывода байты*/
        try {
            f.write(bytes);
        } catch (IOException e) {
            System.out.println("Ошибка записи в буфер");
            return;
        }

        /*Выводим содержимое на экран*/
        System.out.println("Используя метод toString(): " + f);

        /*Выводим в файл последовательность байтов с помощью метода writeTo*/
        System.out.println("Вывод в файл");
        try (FileOutputStream f2 = new FileOutputStream("test.txt")) {
            f.writeTo(f2);
        } catch (IOException e) {
            System.out.println("Ошибка вывода в файл");
            return;
        }

        /*Перемещаем текущий указатель на начало*/
        System.out.println("Установка в исходное состояние");
        f.reset();

        /*Добавляем в поток XXX*/
        for (int i = 0; i < 3; i++) {
            f.write('X');
        }

        /*Выводим содержимое на экран*/
        System.out.println(f);
    }
}

Проект можно взять здесь


Рис. 1. Вывод программы

В данном примере для записи содержимого потока вывода f в файл text.txt вызывается служебный метод writeTo().


На следующем шаге мы приведем примеры использования потоков ввода-вывода байтов

Предыдущий шаг Содержание Следующий шаг