Типы байтовых потоков в Java

Author: Tatyana Milkina

1. Класс InputStream

Класс InputStream – это абстрактный класс. Все байтовые потоки чтения наследуются от класса InputStream.

Методы класса InputStream:

Существует 3 основных read() метода:

  • int read() - возвращает целочисленное представление следующего доступного байта в потоке. При достижении конца файла возвращается значение -1.
  • int read(byte[] buffer) - пытается прочесть максимум buffer.length байт из входного потока в массив buffer. Возвращает количество байт, в действительности прочитанных из потока. По достижении конца файла возвращает значение -1.
  • int read(byte[] buffer, int offset, int length) - пытается прочесть максимум length байт, расположив их в массиве buffer, начиная с элемента offset. Возвращает количество реально прочитанных байт. По достижении конца файла возвращает -1.

Методы read() будут блокированы, пока доступные данные не будут прочитаны. 

  • int available() - возвращает количество байтов ввода, доступные в данный момент для чтения.
  • close() - закрывает источник ввода. Следующие попытки чтения передадут исключение IOException.
  • long skip(long byteCount) - пропускает byteCount байт ввода, возвращая количество проигнорированных байтов.

Все методы выбрасывают исключение IOException, если происходит ошибка ввода вывода. 

2. Класс OutputStream

Все байтовые потоки записи наследуются от абстрактного класса OutputStream.

Методы класса OutputStream:

Существуют 3 основных write() метода:

  • void write(int data) - записывает один байт в выходной поток. Аргумент этого метода имеет тип int, что позволяет вызывать write, передавая ему выражение, при этом не нужно выполнять приведение его типа к byte.
  • void write(byte[] buffer) - записывает в выходной поток весь указанный массив байт.
  • void write(byte[] buffer, int offset, int length) - записывает часть массива в поток - length байт, начиная с элемента buffer[offset].
  • flush() - очищает любые выходные буферы, завершая операцию вывода.
  • close() - закрывает выходной поток. Последующие попытки записи в этот поток будут возбуждать IOException.

Методы выбрасывают исключение IOException, если происходит ошибка ввода вывода.

3. Класс FileInputStream

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

Конструкторы класса FileInputStream:

InputStream a = new FileInputStream("D:/myprogramm/java/test.txt"); 

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

File file = new File("D:/myprogramm/java/test.txt");
InputStream a = new FileInputStream(file);

 Этот конструктор использует объектный файл с целью создания объекта входного потока для чтения файла.

4. Класс FileOutputStream

В Java FileOutputStream используется для создания файла и последующей записи в него. Поток создаст файл в случае его отсутствия перед его открытием для вывода.

Конструкторы класса FileOutputStream:

OutputStream outputStream = new FileOutputStream("D:/myprogramm/java/test.txt");

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

File file = new File("D:/myprogramm/java/test.txt"); 
OutputStream a = new FileOutputStream(file);

Этот конструктор использует объектный файл с целью создания объекта выходного потока для записи файла.

Пример 1. Использование FileInputStream и FileOutputStream

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopy {
    public static void main(String[] args) throws IOException {
        FileInputStream fileIn = null;
        FileOutputStream fileOut = null;

        try {
            fileIn = new FileInputStream("src\\io\\file.txt");
            fileOut = new FileOutputStream("src\\io\\copied_file.txt");

            int a;
            while ((a = fileIn.read()) != -1) {
                fileOut.write(a);
            }
        } finally {
            if (fileIn != null) {
                fileIn.close();
            }
            if (fileOut != null) {
                fileOut.close();
            }
        }
    }
}

Пример 2. Использование FileInputStream и FileOutputStream

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;

public class FileInputOutputStreamExample {
    public static void main(String[] args) {
        try {
            char[] symbols = {'a', 'b', 'c'};
            OutputStream output = new FileOutputStream("a.txt");
            for (int i = 0; i < symbols.length; i++) {
                // Запись каждого символа в текстовый файл
                output.write(symbols[i]);
            }
            output.close();

            InputStream input = new FileInputStream("a.txt");
            int size = input.available();

            for (int i = 0; i < size; i++) {
                // Чтение текстового файла посимвольно
                System.out.print((char) input.read() + " ");
            }
            input.close();
        } catch (IOException e) {
            System.out.print("Exception");
        }
    }
}

5. Классы байтовых потоков

Классы байтовых потоков в Java
Класс Назначение
BufferedlnputStream Буферизированный входной поток.
BufferedOutputStream Буферизированный выходной поток.
ByteArraylnputStream Входной поток, читающий из массива байт.
ByteArrayOutputStream Выходной поток, записывающий в массив байт.
DatalnputStream Входной поток, включающий методы для чтения стандартных типов  данных Java.
DataOutputStream Выходной поток, включающий методы для записи стандартных типов данных Java.
FilelnputStream Входной поток, читающий из файла.
FileOutputStream Выходной поток, записывающий в файл.
FilterlnputStream Реализация InputStream.
FilterOutputStream Реализация OutputStream.
ObjectlnputStream Входной поток для объектов.
ObjectOutputStream Выходной поток для объектов.
OutputStream Абстрактный класс, описывающий поток вывода.
PipedlnputStream Входной канал (например, межпрограммный).
PipedOutputStream Выходной канал.
PrintStream Выходной поток, включающий print() и println().
PushbacklnputStream Входной поток, реализующий операцию pushback (вернуть назад).
RandomAccessFile Позволяет перемещаться по файлу, читать из него или писать в него.
SequencelnputStream Входной поток, представляющий собой комбинацию двух и более входных потоков, которые читаются совместно  один после другого.
Read also:
Comments