- Потоки вывода, OutputStream
- Выходной поток OutputStream
- Класс ByteArrayOutputStream
- Класс FileOutputStream
- Класс BufferedOutputStream
- Класс DataOutputStream
- Класс PrintStream
- Класс ObjectOutputStream
- Класс PipedOutputStream
- Android outputstream to file
- Constructor Summary
- Method Summary
- Methods inherited from class java.lang.Object
- Constructor Detail
- OutputStream
- Method Detail
- write
- write
- write
- flush
- close
- Java FileOutputStream
- Java FileOutputStream
- Java FileOutputStream constructors
- Java FileOutputStream close
- Java FileOutputStream write
- Java FileOutputStream example
- Java FileOutputStream append to file
- Java FileOutputStream specifying encoding
Потоки вывода, OutputStream
Стандартная библиотека Java имеет весьма развитые средства вывода данных. Все возможности вывода данных сосредоточены в пакете java.io.
Существуют две параллельные иерархии классов вывода : OutputStream и Writer. Класс Writer введен в последних версиях Java.
В данной статье рассматривается вопрос использования потоков для вывода данных в файл. Иерархии выходных OutputStream потоков представлена на следующем рисунке.
Поток Stream— это абстрактное значение источника или приёмника данных, которые способны обрабатывать информацию. Есть два типа потоков: байтовые и символьные. В некоторых ситуациях символьные потоки более эффективны, чем байтовые. Классы, производные от классов OutputStream или Writer, имеют методы с именами write() для записи одиночных байтов или массива байтов (отвечают за вывод данных).
Выходной поток OutputStream
Класс OutputStream — это абстрактный класс, определяющий байтовый поток вывода. Наследники данного класса определяют куда направлять данные: в массив байтов, в файл или канал. Из массива байт можно создать текстовую строку String.
Методы класса OutputStream :
- void write(int b) записывает один байт в выходной поток. Аргумент этого метода имеет тип int, что позволяет вызывать write, передавая ему выражение, при этом не нужно выполнять приведение его типа к byte.
- void write(byte b[]) записывает в выходной поток весь указанный массив байтов.
- void write(byte b[], int off, int len) записывает в поток len байтов массива, начиная с элемента b[off].
- void flush() очищает любые выходные буферы, завершая операцию вывода.
- void close() закрывает выходной поток. Последующие попытки записи в этот поток будут возбуждать IOException.
Класс ByteArrayOutputStream
Класс ByteArrayOutputStream представляет поток вывода, использующий массив байтов в качестве места вывода. Чтобы создать объект данного класса, можно использовать один из его конструкторов :
Первый конструктор создает массив данных для хранения байтов длиной в 32 байта, а второй конструктор создает массив длиной size.
Примеры использования класса ByteArrayOutputStream :
В классе ByteArrayOutputStream метод write записывает в поток некоторые данные (массив байтов). Этот массив байтов записывается в объекте ByteArrayOutputStream в защищенное поле buf, которое представляет также массив байтов (protected byte[] buf). Так как метод write может вызвать исключение, то вызов этого метода помещается в блок try..catch.
Используя методы toString() и toByteArray(), можно получить массив байтов buf в виде текста или непосредственно в виде массива байт.
С помощью метода writeTo можно перенаправить массив байт в другой поток. Данный метод в качестве параметра принимает объект OutputStream, в который производится запись массива байт :
Для ByteArrayOutputStream не надо явным образом закрывать поток с помощью метода close.
Класс FileOutputStream
Класс FileOutputStream создаёт объект класса OutputStream, который можно использовать для записи байтов в файл. Это основной класс для работы с файлами. Создание нового объекта не зависит от того, существует ли заданный файл или нет. Если файл отсутствует, то будет создан новый файл. В случае попытки открытия файла, доступного только для чтения, будет вызвано исключение.
FileOutputStream имеет следующий конструкторы:
Смысл конструкторов последнего понятен из их описания. Но имеется несколько нюансов :
- При открытии файла на запись, если файл не существует, то он будет создан.
- Если файл существует, то он будет полностью обновлен. Т.е. если открыть и сразу закрыть файл, то содержимое файла будет уничтожено; реальный файл на диске станет нулевой длины.
- Исключением для предыдущего правила является последний из конструкторов. Если третьему параметру append присвоить значение true, то можно будет дописывать в конец файла.
Какой-либо дополнительной функциональности по сравнению с базовым классом FileOutputStream не добавляет.
Класс BufferedOutputStream
Класс BufferedOutputStream создает буфер для потоков вывода. Этот буфер накапливает выводимые байты без постоянного обращения к устройству. И когда буфер заполнен, производится запись данных.
Класс BufferedOutputStream в конструкторе принимает в качестве параметра объект OutputStream — в примере это файловый поток вывода FileOutputStream.
BufferedOutputStream не добавляет много новой функциональности, он просто оптимизирует действие потока выводаи его следует использовать для организации более эффективного буферизованного вывода в поток.
Класс DataOutputStream
Класс DataOutputStream позволяет писать данные в поток через интерфейс DataOutput, который определяет методы, преобразующие элементарные значения в форму последовательности байтов. Такие потоки облегчают сохранение в файле двоичных данных.
Для записи каждого из примитивных типов предназначен свой метод класса DataOutputStream:
- writeByte(int value) — записывает в поток 1 байт
- writeChar(int value) — записывает 2х-байтовое значение char
- writeInt(int value) — записывает в поток целочисленное значение int
- writeShort(int v) — записывает в поток значение short
- writeFloat(float value) — записывает в поток 4-байтовое значение float
- writeDouble(double value) — записывает в поток 8-байтовое значение double
- writeBoolean(boolean value) — записывает в поток булевое однобайтовое значение
- writeLong(long value) — записывает в поток значение long
- writeUTF(String value) — записывает в поток строку в кодировке UTF-8
Класс PrintStream
PrintStream является именно тем классом, который используется для вывода информации в консоль. Когда мы с помощью вызова System.out.println() пишем в консоль некоторую информацию, то тем самым используется PrintStream, так как переменная out класса System представляет объект класса PrintStream, а метод println() — это метод класса PrintStream.
Но PrintStream можно использовать для записи информации в поток вывода. Например, запишем информацию в файл:
В данном примере используется конструктор PrintStream, который в качестве параметра принимает поток вывода FileOutputStream. Можно было бы также использовать конструктор с указанием названия файла для записи: PrintStream (String filename).
С помощью метода println() производится запись информации в выходной поток — то есть в объект FileOutputStream. В случае с выводом на консоль с помощью System.out.println() в качестве потока вывода выступает консоль.
Для вывода информации в выходной поток PrintStream использует следующие методы:
Следующий код показывает возможности использования форматированного вывода класса PrintStream :
Класс ObjectOutputStream
Класс ObjectOutputStream используется для сериализации объектов в поток. Сериализация представляет процесс записи состояния объекта в поток, соответственно процесс извлечения или восстановления состояния объекта из потока называется десериализацией. Сериализация очень удобна, когда идет работа со сложными объектами.
Для создания объекта ObjectOutputStream необходимо в конструктор передать поток, в который будет производится запись объектов.
Для записи данных ObjectOutputStream использует ряд методов, среди которых можно выделить следующие:
Метод | Описание |
---|---|
void close() | закрывает поток |
void flush() | сбрасывает содержимое буфера в выходной поток и очищает его |
void write(byte[] buf) | записывает в поток массив байтов |
void write(int val) | записывает в поток один младший байт из val |
void writeBoolean(boolean val) | записывает в поток значение boolean |
void writeByte(int val) | записывает в поток один младший байт из val |
void writeChar(int val) | записывает в поток значение типа char, представленное целочисленным значением |
void writeDouble(double val) | записывает в поток значение типа double |
void writeFloat(float val) | записывает в поток значение типа float |
void writeInt(int val) | записывает целочисленное значение |
void writeLong(long val) | записывает значение типа long |
void writeShort(int val) | записывает значение типа short |
void writeUTF(String str) | записывает в поток строку в кодировке UTF-8 |
void writeObject(Object obj) | записывает в поток отдельный объект |
Представленные методы охватывают весь спектр данных, которые можно сериализовать.
Пример использования класса ObjectOutputStream :
Необходимо принимать во внимание, что сериализовать можно только те объекты, которые реализуют интерфейс Serializable.
Класс PipedOutputStream
Пакет java.io содержит класс PipedOutputStream, который может быть подключен к PipedInputStream, используемый для установления связи между двумя каналами. Данные в PipedOutputStream передаются в потоке Thread, который отправляет их в подключенный PipedInputStream, где данные также читаются, но в другом потоке.
То есть, класс PipedOutputStream предназначен для передачи информации между программами через каналы (pipes).
Наиболее часто используемые методы класса PipedOutputStream :
- void write(int b) — запись байта в канал
- void write(byte[] bytes, int off, int len) — запись определенного количества len байт начиная со смещения off массив bytes
- connect(PipedInputStream pis) — установление связи в каналом ввода pis
- close() — закрытие канала
- flush() — сброс данных в канал
Все методы класса могут вызвать исключение IOException.
Пример использования класса PipedOutputStream :
Источник
Android outputstream to file
Applications that need to define a subclass of OutputStream must always provide at least a method that writes one byte of output.
Constructor Summary
Constructor and Description |
---|
OutputStream () |
- FileOutputStream(File file) — creates a file output stream to write to a File object.
- FileOutputStream(File file, boolean append) — creates a file output stream to write to a File object; allows appending mode.
- FileOutputStream(FileDescriptor fdObj) — creates a file output stream to write to the specified file descriptor.
- FileOutputStream(String name) — creates a file output stream to write to the file with the specified name.
- FileOutputStream(String name, boolean append) — creates a file output stream to write to the file with the specified name; allows appending mode.
- write(byte[] b) — writes array of bytes to the file output stream.
- write(byte[] b, int off, int len) — writes len bytes from the specified byte array starting at offset off to the file output stream.
- write(int b) — writes one byte to the file output stream.
Method Summary
Modifier and Type | Method and Description |
---|---|
void | close () |
Methods inherited from class java.lang.Object
Constructor Detail
OutputStream
Method Detail
write
Subclasses of OutputStream must provide an implementation for this method.
write
write
The write method of OutputStream calls the write method of one argument on each of the bytes to be written out. Subclasses are encouraged to override this method and provide a more efficient implementation.
If b is null , a NullPointerException is thrown.
If off is negative, or len is negative, or off+len is greater than the length of the array b , then an IndexOutOfBoundsException is thrown.
flush
If the intended destination of this stream is an abstraction provided by the underlying operating system, for example a file, then flushing the stream guarantees only that bytes previously written to the stream are passed to the operating system for writing; it does not guarantee that they are actually written to a physical device such as a disk drive.
The flush method of OutputStream does nothing.
close
The close method of OutputStream does nothing.
Источник
Java FileOutputStream
last modified November 12, 2021
Java FileOutputStream tutorial shows how to use FileOutputStream class to write to files in Java.
Java FileOutputStream
FileOutputStream is an output stream for writing data to a File or to a FileDescriptor . FileOutputStream is a subclass of OutputStream , which accepts output bytes and sends them to some sink. In case of FileOutputStream , the sink is a file object.
Java FileOutputStream constructors
These are FileOutputStream constructors:
Java FileOutputStream close
The FileOutputStream’s close method closes file output stream and releases any system resources associated with this stream. In our examples we use try-with-resources statement, which ensures that each resource is closed at the end of the statement.
Java FileOutputStream write
FileOutputStream writes bytes with the following write methods :
Java FileOutputStream example
The following example uses FileOutputStream to write text to a file.
The code example writes one line to a file.
The FileOutputStream constructor takes a string as a parameter; it is the file name to which we write. We use try-with-resources construct to clean resources after we have finished writing.
FileOutputStream write bytes to the file; we get bytes from a string with the getBytes method.
The bytes are written to the file.
We show the contents of the file with the cat command.
Java FileOutputStream append to file
With FileOutputStream it is possible to append data to a file. The typical usage for appending is logging.
The code example appends text to file.
The second parameter of FileOutputStream indicates that we will append to the file.
Java FileOutputStream specifying encoding
FileWriter class, which is a Java convenience class for writing character files, has a serious limitation: it uses the default encoding and does not allow us to explicitly specify the encoding. If we have to set the encoding, we can use OutputStreamWriter and FileOutputStream .
The example writes text to a file with OutputStreamWriter . The second parameter is the charset to be used.
We show the contents of the file.
In this tutorial, we have presented the Java FileOutputStream class.
Источник