Файл: Разница в io при работе с файлом и директорией. Что делает метод available().docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.12.2023
Просмотров: 269
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
-
В классе Thread определены семь перегруженных конструкторов, большое количество методов, предназначенных для работы с потоками, и три константы (приоритеты выполнения потока).
-
Не нужно закрывать обычный Stream из Stream API.
-
Строки – неизменяемый объект, мы можем копировать их просто ссылаясь на них. -
Так как строки иммутабельны, клонировать их не обязательно (хотя можно). Хватит и клонировать только массив, а строки использовать те же -
При стандартной сериализации поля, имеющие модификатор static, не сериализуются. Соответственно, после десериализации это поле значения не меняет. При использовании реализации Externalizable сериализовать и десериализовать статическое поле можно, но не рекомендуется этого делать, т.к. это может сопровождаться трудноуловимыми ошибками. Поле с модификатором trainsent, будет равно null. -
flush (), очищает все потоки данных и полностью их записывает, а также дает новое пространство для новых потоков во временном расположении буфера. Но если буффер пустой (/ не попали данные через write) – то ничего записано не будет -
Токен (или маркер) представляет собой серию цифровых или буквенно-цифровых символов, которая заканчивается разделителем. Разделителем может быть символ табуляции, возврат каретки (перевод строки или же просто ‘Enter’), конец файла или пробел. -
Переопределение метода clone() и реализация интерфейса Cloneable(); Использование конструктора копирования;
Использовать для клонирования механизм сериализации.
-
System.out/System.in – консольные потоки ввода вывода. -
Cканнер очень сильно проигрывает по быстродействию, он примерно в 1000 раз медленнее, чем BufferedReader. Но у сканнера уже впилены удобные функции по разбору текста на разные данные (целые числа, дробные числа, текст и тп), когда у bufferedreader-a их придется отдельно парсить.
Итог - если данных мало, то удобнее сканнер, если много или важна быстрота - то однозначно bufferedreader
-
Класс File, определенный в пакете java.io, не работает напрямую с потоками. Его задачей является управление информацией о файлах и каталогах. Хотя на уровне операционной системы файлы и каталоги отличаются, но в Java они описываются одним классом File.
Если вы хотите создать новый файл и в то же время, если хотите записать в него некоторые данные, вы можете использовать метод записи FileOutputStream. В Java FileOutputStream является классом потока байтов. Чтобы записать данные в файл, вы должны преобразовать данные в байты, а затем сохранить их в файл.Создание временного файла в java может потребоваться во многих сценариях, но в основном это происходит во время модульных тестов, где вы не хотите сохранять результаты.Создание с помощью java.io.File.createTempFile()
-
Java не может удалять папки с данными в нем. Вы должны удалить все файлы перед удалением папки.
-
Он возвращает int, потому что, когда поток больше не может быть прочитан, он возвращает -1.
-
255, так как обрезается до 8 битов -
System.out.println(Arrays.toString(bytes));
-
Сканер может читать текст с любого объекта, который реализует интерфейс Readable. Если вызов базового метода Readable.read (java.nio.CharBuffer), доступного для чтения, генерирует IOException, то сканер предполагает, что достигнут конец ввода.
Похоже, что Scanner не имеет своего собственного буфера. Он использует буфер из базового объекта (который реализует Readable) и использует регулярные выражения для анализа.
-
Клонирование — это процесс копирования объекта, то есть создания нового экземпляра путем копирования самого себя.
-
В переводе на русский означает, что flush() вызывает чистку буфера вызывая метод реализованный в самой ОС поверх которой работает JVM. При этом даже отсутствие буфера в самом потоке не означает, что не будет использоваться в качестве буфера кэш диска на уровне ОСи или даже ниже. Использование flush() – хороший тон поскольку, девелопер не знает есть ли буфер на уровне ОС -
Декоратор — это структурный паттерн, который позволяет добавлять объектам новые поведения на лету, помещая их в объекты-обёртки.inputstream, bytearrayinputstream, stringbuilderinputstreams и так далее являются основанными элементами. Filterinputstream - это базовый класс для классов декораторов. Фильтр входных потоков (например, bufferedinput stream) может выполнять дополнительные функции при чтении потоков или записи в них. Он реализует все те же методы, что и InputStream, который лежит в нём, но позволяет к ним добавить доп. функционал. Конкретно его используют для какой-либо модификации данных из InputStream (т.е. фильтрации).
-
Клонирование – создает что-то новое на основе существующего.
-
Если вы хотите, чтобы буфер был сброшен, да, вызовите flush() перед вызовом close().
Несмотря на все другие ответы на обратное (но, как указано в некоторых комментариях), реализация java.io.OutputStream::close() по умолчанию не вызывает flush()
-
Java IO (input-output) является потокоориентированным
Java NIO (new/non-blocking io) – буфер-ориентированным. -
Static (если не сделали нужный static метод) и transient -
Когда Serializable класс имеет цепочку родителей, пока эти родители тоже Serializable, десериализация объекта идет от родителя к наследнику, в обход конструктора. Вместо него вызываются методы readObject (readObjectNoData). Но как только встречается первый предок, не реализующий интерфейс Serializable, инициализация для него возвращается в нормальное русло – вместо readObject вызывается конструктор без аргументов. Если такого конструктора нет, или он объявлен private, исполнение выбросит InvalidClassException.
-
Соответственно, если необходимо сериализовать объект с final полем необходимо использовать только стандартную сериализацию. Так как их невозможно десериализовать при использовании Externalizable, поскольку final поля должны быть инициализированы в конструкторе, а после этого в readExternal() изменить значение этого поля будет невозможно. -
При записи Serializable класса весь контроль над сериализацией достается JVM. С помощью определения специальных методов можно кастомизировать его части. Метод readObject при этом обычно начинается с вызова стандартной части сериализации – ObjectInputStream.defaultReadObject().
-
Метод close () закрывает соединение между программой и открытым файлом, чтобы закрыть ресурсы которые не могут не может очистить garbage collector, так как он не знает какие ресурсы есть помимо JVM.
-
Адаптер и декоратор:
-
Если вам нужно сериализовать статические поля, вы должны делать это вручную. (Создать статический метод, которые сериализует статическое поле)