Типы байтовых потоков в 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 | Входной поток, представляющий собой комбинацию двух и более входных потоков, которые читаются совместно один после другого. |
Please log in or register to have a possibility to add comment.