На этом шаге мы рассмотрим класс 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().
На следующем шаге мы приведем примеры использования потоков ввода-вывода байтов