Файл: Какие существуют виды потоков вводавывода.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.04.2024

Просмотров: 15

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
, неизвестную Java. В этом случае запись можешь кэшироваться в буферах ОС".

На каком паттерне основана иерархия потоков ввода/вывода?

Объекты классов Java, которые используются для ввода/вывода, для обеспечения необходимой функциональности наслаиваются друг на друга. Такая модель взаимодействия объектов поддерживается в паттерне «Декоратор». В этом паттерне при создании потока нужно использовать несколько объектов.

Что возвращает перегруженный read. Какаое максимальное значение вернет?

Метод read() используется для чтения символов.

Данный метод возвращает кол-во только что прочитанных символов (целое число от 0 до 65635) или -1, если достиг конца stream(потока).

Он возвращает int, потому что диапазон byte в Java лежит от -127 до 127, а возвращаемое значение метода read() лежит в диапазоне от 0 до 255.

Чтобы получит представление byte в int, в методе read() используется побитовое "И" с числом 255, т.е убираются лидирующие единицы.

Для чего нужен Scanner? Что такое токен в Scanner? Отличие Scanner’a от BufferedReader’a? Есть ли у сканера буфер?

Сканер нужен для считывания данных из источника, который мы для него указываем. Например, из строки, файла или консоли. Далее он распознает эту информацию и обрабатывает нужным образом.

Сканер выполняет поиск токенов во входной строке.

Токен — это серия цифровых или буквенно-цифровых символов, которые заканчиваются разделителем. Стандартными разделителями являются: пробел ' ', символ табуляции '\t', перевода строки '\n' и возврата каретки '\r', который должен иметь тип String.

3.1. BufferedReader работает синхронно, а Scanner — нет. BufferedReader следует использовать, если мы работаем с несколькими потоками.

3.2. BufferedReader имеет значительно большую буферную память, чем Scanner.

3.3. Сканер имеет небольшой буфер (1KB буфер символов или 1024 байта) в отличие от BufferedReader (8KB байтовый буфер или 8192 байта), но этого более чем достаточно.

3.4. BufferedReader немного быстрее по сравнению со сканером, потому что сканер выполняет синтаксический анализ входных данных, а BufferedReader просто читает последовательность символов.

Методы класса File?

createNewFile() - создает
новый файл по пути, который передан в конструкторе;

delete() - удаляет каталог или файл по пути, который передан в конструкторе. Директория или файл должны быть пустыми;

exists() - проверяет, существует ли по указанному в конструкторе пути файл или каталог;

getAbsolutePath() - возвращает абсолютный путь для пути, который передан в конструктор

getName() - возвращает краткое имя файла или каталога

length() - возвращает размер файла в байтах

mkdir() - создает новый каталог и при удачном создании возвращает значение true

Для создания нового файла, во время инициализации объекта File, мы должны предоставить ему имя файла, а затем создать сам новый файл вызовом метода createNewFile().

Как создать файл на компьютере с помощью java?

Создать файл в Java с помощью объекта File можно тремя способами:

1. Передав в объект абсолютный путь

2. Указать только имя файла

3. Указать относительный путь

Как удалить директорию с файлами. Что если в ней есть вложенные директории ?

Чтобы удалить директорию с файлами, сначала необходимо удалить сами файлы в папке, а затем и саму папку.

В чём отличие File от Path?

File - класс, самая старая версия работы с папками и файлами

Его методы возвращают тру/фолс

Path - интерфейс, гораздо новый, его методы выбрасывают исключение в случае проблем.

Что такое сериализация и десериализация.

Сериализация — процесс сохранения состояния объекта в последовательность байт.

Десериализация — процесс восстановления объекта из этих байт.

Любой Java объект можно преобразовать в последовательность байт.

Одно уточнение — чтобы появилась возможность сериализовать объект, он должен наследовать интерфейс Serializable.

Данный интерфейс не имеет каких-либо методов, а
просто дает понять системе, что объект, который реализует его, может быть сериализован.

Для сериализации объектов в поток используется класс ObjectOutputStream. Он записывает данные в поток.

Для десериализации используется класс ObjectInputStream

Какие поля не сериализуются?

При стандартной сериализации, поля с модификатором static не сериализуются. Соответственно, после десериализации это поле значение не поменяет, т.к. static поля принадлежат классу, а не объекту.

Что будет при сериализации объекта у которого есть поле и оно не Serializable?

Код скомпилируется и выкинет исключение: Exception in thread "main" java.io.NotSerializableException!

Если это поле находится в классе, от которого наследуется класс, над которым будет проходить сериализация, то это поле должно быть доступно напрямую или через геттеры и сеттеры классу, над которым будет проходить сериализация. В этом классе придется реализовать пользовательскую сериализацию.

Externalizable vs Serializable?

При записи Serializable класса весь контроль над сериализацией достается JVM.

Интерфейс Externalizable расширяет Serializable и добавляет методы записи и чтения writeExternal и readExternal. Этот интерфейс позволяет реализовать полностью свой механизм сериализации, стандартно запишется только идентификатор класса. У него есть свои плюсы:

1) Производительность

2) Гибкость. Serializable вообще не позволяет управлять процессом, кроме исключения полей или добавление (через свою реализацию методов writeObject/readObject).

3) Безопасность. Иногда необходимо шифрование данных.

Любой класс, имплементирующий интерфейс Externalizable и его наследники, обязан иметь конструктор по умолчанию!

Расширенный алгоритм сериализации (Externalizable) может быть использован, если данные содержат «конфиденциальную» информацию. В этом случае имеет смысл шифровать сериализуемые данные и дешифровать их при десериализации, что требует реализацию собственного алгоритма.


Какие интерфейсы реализует InputStream/ OutputStream/ Reader/ Writer?

InputStream реализует интерфейсы: Closeable и AutoCloseable

OutputStream реализует интерфейсы: Closeable, Flushable, AutoCloseable

Reader реализует интерфейсы: Closeable, AutoCloseable, Readable

Writer реализует интерфейсы: Closeable, Flushable, Appendable, AutoCloseable