Default Flashcards
Input\output streams in Java.
Два типа стримов?
Buffered streams.
Стрим - абстракция над потоком(последовательностью) данных.
Input\Output стримы нужны для того, чтобы читать\писать информацию из\в различные источники (файл на диске, сетевой ресурс и тд).
Два типа стримов: char или byte.
byte stream - более низкоуровневый тип, где работа происходит непосредственно с потоком байтов.
char - работа происходит с чарами в 16-битной кодировке Unicode (UTF).
В некоторых случаев удобнее использовать буфферезированые потоки, где данные вычитываются\записываются не целиком, а с помощью буффера определенного размера.
Дефолтная кодировка в джаве?
UTF-8
Input streams.
Базовый класс для чтения и его основной перегруженный метод? Что этот метод возвращает? Блокирует ли он выполнение программы и надо ли что-то делать?
Основные потомки базового класса?
Как обычно вычитываются данные из сорса?
Основной класс для работы с байтовыми стримами и его методы? Его подклассы?
Буфферизированные варианты для байтовых и чаровых стримов?
Что происходит при нажатии enter в консоле с вводом данных?
Базовый класс для чаровых стримов - java.io.Reader. Его основной метод - read(), который существует в нескольких перегруженных версиях. На вход принимает или ничего, или например массив, куда надо читать, а возвращает int - или числовое отображение прочтенного чара, или количество прочтенных чаров. Если данные в сорсе закончились, то возвращается “-1”.
Метод блокирует выполнение программы, поэтому нужно использовать close() после работы со стримом. Лучше всего исопльзовать try-with-resources.
Один из способов вычитывания - вычитывать пока не вернется -1, что будет означать, что данных больше нет.
Основные потомки - это версии для разных сорсов:
FileReader, StringReader, CharArrayReader.
Основной класс для байтовых стримов java.io.InputStream. Основные подклассы: FileInputStream, ByteArrayInputStream, AudioInputStream.
Основной метод - read(), с перегруженными вариантами для того, чтобы контролировать количество байтов, которые нужно прочитать.
Для буфферизации можно использовать BufferedReader и BufferedInputStream, которые на вход конструктора принимают другой стрим и возвращают его буфферизированную версию. Опционально можно задать размер буфера.
При нажатии enter в консоли вычитывает не только то, что было введено, но и \n - символ окончания строки. Это нужно учитывать при работе с вводом.
Что может содержать интерфейс?
PADS
Что будет если при инстанциировании параметризованного класса не указать тип? ArrayList list = new ArrayList();
Получится объект “сырого типа”, то есть в коллекции будут храниться объекты типа Object.
Аналогично ArrayList list = new ArrayList<>();
Каков синтаксис дженерик метода?
class Box { private T item;
// тут используется параметр Т, который определен на уровне класса.
public T returnT(T t) { return t; }
// а тут в методе используется свой новый тип, поэтому его надо указывать в сигнатуре метода.
public <u> U returnU(U u) { return u; } }</u>
Как задать ограничение на классы, которые могут использоваться в качестве типа у дженерика?
Что такое type bounds?
Есть ли какое-то ограничение в у типа T в записи: class Storage?
Можно ли задать несколько ограничений?
Для ограничения можно использовать type bound.
Например можно ограничить классы, с которыми будет работать коллекция только числами:
ArrayList list;
Bound есть всегда, если ничего не указано, то подразумевается . class Storage эквивалентно class Storage
Можно задавать несколько ограничений:
class Storage
При этом, так как в джаве запрещено множественное наследование, класс может быть только один (в данном случае А), остальное - это интерфейсы. Класс должен всегда идти первым в списке, другой порядок приведет к compile-time error.
Что будет если определить енам как: public abstract class Enum implements Comparable
вместо:
public abstract class Enum> implements Comparable
-