Потоки ввода/вывода

Files.copy(). Относительный путь

Если в метод Files.copy() передаётся относительный путь файла, в который производится копирование, он будет создан относительно файла .class, в котором этот метод вызывается, а не относительно файла, из которого производится копирование. ... Читать дальше »

Чтение и запись файлов с помощью I/O потоков

Чтение файлов с помощью потоков ввода/вывода производится по 1 байту. Для небольших файлов это работает вполне неплохо, но при обработке файлов даже в несколько мегабайт процесс начинает занимать очень много времени, а нагрузка на систему возрастает. Для ускорения чтения/записи нужно использовать буферизованные версии методов read() и write(), принимающих в качестве входного параметра массив байт. ... Читать дальше »

NIO2. relativize() - разница путей

path1.relativize(path2) вычисляет относительный путь двух путей – «разницу путей». Можно думать так: "как из path1 попасть в path2".
Оба пути должны быть либо относительные, либо абсолютные. ... Читать дальше »

Чтение файла с помощью Files

В классе java.nio.file.Files есть статические методы readAllBytes(path) и readAllLines(path, charset), с помощью которых можно считывать содержимое файла в виде байт или последовательности строк. ... Читать дальше »

Чтение и запись объектов и примитивных типов с помощью ObjectOutputStream/ObjectInputStream

Для ObjectOutputStream/ObjectInputStream также важно соблюдать порядок записи/чтения данных: объекты должны считываться в том же порядке, в котором были записаны. Иначе можно словить java.lang.ClassCastException. ... Читать дальше »

Чтение и запись объекта с несереализуемым родительским классом

Если класс содержит ссылочные поля, указывающие на объекты, которые не реализуют интерфейс Serializable, то при попытке записать объект такого класса в поток вывода будет выброшено runtime-иcключение java.io.NotSerializableException.
Однако, если записать в поток ввода/вывода объект, реализующий интерфейс Serializable, родитель которого этот интерфейс не реализует, запись и чтение такого объекта пройдут успешно без потери информации. ... Читать дальше »

Запись и чтение примитивных типов с помощью DataOutputStream/DataInputStream

DataOutputStream/DataInputStream позволяют записывать и считывать в потоки ввода/вывода примитивные типы данных.
Данные, записанные с помощью DataOutputStream должны быть прочитаны только посредством DataInputStream, причём обязательно в том же порядке, в котором они были записаны.

DataOutputStream записывает байты для определённого типа данных. Каждый тип данных интерпретируется по-своему и занимает своё количество байт. Например, int занимает 4 байта, а double - 8 байт. Каждая операция записи преобразует свой тип данных в соответствующий ему набор байт. Аналогичным образом поступают и операции считывания: они создают требуемый тип данных из доступных байт.
Поэтому если данные будут считаны не в том порядке, в котором они были записаны, можно получить неожиданный результат. ... Читать дальше »