Типы байтовых потоков в Java
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. Классы байтовых потоков
| Класс | Назначение |
| 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 | Входной поток, представляющий собой комбинацию двух и более входных потоков, которые читаются совместно один после другого. |
Курс 'Java для начинающих' на Udemy
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.