
- •Механизмы ввода и вывода
- •План лекции
- •Обмен данными
- •Традиционно, проблемы!
- •Потоки данных
- •Разновидности потоков
- •Структура пакета java.io
- •Разновидности потоков
- •Класс InputStream
- •Класс OutputStream
- •Класс Reader
- •Класс Writer
- •Классы потоков ввода и вывода
- •Иерархия байтовых потоков
- •Иерархия символьных потоков
- •Забавная особенность
- •Группа потоков Print
- •Группа байтовых потоков ByteArray
- •Группа байтовых потоков ByteArray
- •Группы символьных потоков CharArray и String
- •Группа потоков File
- •Классы-трансляторы
- •InputStreamReader и
- •Группа потоков Filter
- •Группа потоков Buffered
- •Группа потоков Buffered
- •Группа потоков Piped
- •Группа потоков Piped
- •Класс StreamTokenizer
- •Класс StreamTokenizer
- •Группа байтовых потоков Data
- •Группа байтовых потоков Data
- •Класс File
- •Класс File
- •Пример записи в текстовый файл
- •Пример чтения из текстового файла и из консоли
- •Пример записи в байтовый файл
- •Пример чтения из байтового файла
- •Соответствие классов для байтовых и символьных потоков
- •Соответствие классов для байтовых и символьных потоков
- •Сериализация объектов
- •Сериализация объектов
- •Группа байтовых потоков Object
- •Пример сериализации в файл
- •Пример десериализации из файла
- •Сравнение исходного и восстановленного объектов
- •Подготовка классов к сериализации
- •Порядок сериализации и десериализации
- •Пример иерархии классов
- •Результаты десериализации
- •Порядок сериализации
- •Порядок десериализации
- •Сериализация связанных объектов
- •Настройка сериализации
- •Настройка сериализации
- •Контроль версий
- •Спасибо за внимание!
- •Дополнительные источники

Группа байтовых потоков Data
Интерфейсы DataInput и DataOutput содержат объявления методов ввода и вывода значений
простых типов
void writeLong(long v), void writeFloat(float v) boolean readBoolean(), String readUTF()
Обертки DataInputStream и DataOutputStream, соответственно, реализуют эти интерфейсы
Класс RandomAccessFile реализует оба интерфейса Data и позволяет работать с файлами в режиме произвольного доступа
31

Группа байтовых потоков Data
DataInputStream input = new DataInputStream(
new FileInputStream("binary.file")); int byteVal = input.read();
int intVal = input.readInt(); float floatVal = input.readFloat();
double doubleVal = input.readDouble(); input.close();
DataOutputStream output = new DataOutputStream(
new FileOutputStream("binary.file"));
output.write(10); |
//byte data |
output.writeInt(1000); |
//int data |
output.writeDouble(1000.123); |
//double data |
output.close(); |
|
32

Класс File
Инкапсулирует платформенно-независимые методы работы с файлами и директориями:
создание, переименование, удаление
проверка типа пути: файл или каталог
проверка атрибутов файлов и каталогов
проверка существования файлов и каталогов
Позволяет создавать временные файлы, удаляемые при завершении работы программы
Определяет доступ лишь к метаданным файловой системы
для чтения или записи используются потоки данных
33

Класс File
File obj = new File("D:\\data"); if (obj.mkdir() && obj.exists()) {
obj = new File("D:\\data\\file.txt");
if (obj.createNewFile() && obj.exists()) {
File newObj = new File("D:\\data\\newfile.txt"); obj.renameTo(newObj);
System.out.println("Can write is " + newObj.canWrite() + " for file " +
newObj.getPath());
newObj.delete();
}
obj = obj.getParentFile(); obj.delete();
}
34

Пример записи в текстовый файл
import java.io.*;
public class TextWrite {
public static void main(String[] args) { int[] values = {1, 2, 3, 4, 5};
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("out.txt")));
for (int i = 0; i < values.length; i++) { out.println(values[i]);
}
out.close();
}
catch(IOException e) { System.out.println("Some error occurred!");
}
}
}
out.txt
Текстовая форма
1
2
3
4
5
out.txt
Байтовая форма
31 0D 0A
32 0D 0A
33 0D 0A
34 0D 0A
35 0D 0A
35

Пример чтения из текстового файла и из консоли
import java.io.*;
public class TextRead {
public static void main(String[] args) { int[] values = new int[5];
try {
BufferedReader in = new BufferedReader(new FileReader("in.txt")); //InputStreamReader(System.in));
for (int i = 0; i < values.length; i++) { values[i] = Integer.parseInt(in.readLine());
}
in.close();
}
catch(IOException e) { System.out.println("Some error occurred!");
}
}
}
36

Пример записи в байтовый файл
import java.io.*;
public class ByteWrite {
public static void main(String[] args) { int[] values = {1, 2, 3, 4, 5};
try {
DataOutputStream out = new DataOutputStream(new FileOutputStream("out.bin"));
for (int i = 0; i < values.length; i++) { out.writeInt(values[i]);
}
out.close();
}
catch(IOException e) { System.out.println("Some error occurred!");
}
}
}
out.bin Текстовая форма
☺ ☻ ♥
♦♣
out.bin Байтовая форма
00 00 00 01
00 00 00 02
00 00 00 03
00 00 00 04
00 00 00 05
37

Пример чтения из байтового файла
import java.io.*;
public class ByteRead {
public static void main(String[] args) { int[] values = new int[5];
try {
DataInputStream in = new DataInputStream(new FileInputStream("out.bin"));
for (int i = 0; i < values.length; i++) { values[i] = in.readInt();
}
in.close();
}
catch(IOException e) { System.out.println("Some error occurred!");
}
}
}
38

Соответствие классов для байтовых и символьных потоков
Байтовый поток |
Символьный поток |
InputStream |
Reader |
OutputStream |
Writer |
ByteArrayInputStream |
CharArrayReader |
ByteArrayOutputStream |
CharArrayWriter |
Нет аналога |
InputStreamReader |
Нет аналога |
OutputStreamWriter |
FileInputStream |
FileReader |
FileOutputStream |
FileWriter |
FilterInputStream |
FilterReader |
FilterOutputStream |
FilterWriter |
BufferedInputStream |
BufferedReader |
BufferedOutputStream |
BufferedWriter |
39

Соответствие классов для байтовых и символьных потоков
Байтовый поток |
Символьный поток |
PrintStream |
PrintWriter |
DataInputStream |
Нет аналога |
DataOutputStream |
Нет аналога |
ObjectInputStream |
Нет аналога |
ObjectOutputStream |
Нет аналога |
PipedInputStream |
PipedReader |
PipedOutputStream |
PipedWriter |
StringBufferInputStream |
StringReader |
Нет аналога |
StringWriter |
LineNumberInputStream |
LineNumberReader |
PushBackInputStream |
PushBackReader |
SequenceInputStream |
Нет аналога |
40