Потоки ввода/вывода
Потоки ввода/вывода
Программы, написанные нами в предыдущих главах, воспринимали информацию только из параметров командной строки и графических компонентов, а результаты выводили на консоль или в графические компоненты. Однако во многих случаях требуется выводить результаты на принтер, в файл, базу данных или передавать по сети. Исходные данные тоже часто приходится загружать из файла, базы данных или из сети.Консольный ввод/вывод
Для вывода на консоль мы всегда использовали метод printin() класса Pnntstream, никогда не определяя экземпляры этого класса. Мы просто использовали статическое поле out класса system, которое является объектом класса PrintStream. Исполняющая система Java связывает это поле с консолью.Файловый ввод/вывод
Поскольку файлы в большинстве современных операционных систем понимаются как последовательность байтов, для файлового ввода/вывода создаются байтовые потоки с помощью классов Fileinputstream и FileOutputstream. Это особенно удобно для бинарных файлов, хранящих байт-коды, архивы, изображения, звук.Получение свойств файла
В конструкторах классов файлового ввода/вывода, описанных в предыдущем разделе, указывалось имя файла в виде строки. При этом оставалось неизвестным, существует ли файл, разрешен ли к, нему доступ, какова длина файла.Буферизованный ввод/вывод
Операции ввода/вывода по сравнению с операциями в оперативной памяти выполняются очень медленно. Для компенсации в оперативной памяти выделяется некоторая промежуточная область – буфер, в которой постепенно накапливается информация.Поток простых типов Java. Кодировка UTF-8.
Класс DataOutputstream позволяет записать данные простых типов Java в выходной поток байтов методами writeBoolean (boolean b), writeByte(int b), writeShort(int h), writeChar(int c), writelnt(int n), writeLong(long 1), writeFloat(float f), writeDouble(double d).Прямой доступ к файлу
Если необходимо интенсивно работать с файлом, записывая в него данные разных типов Java, изменяя их, отыскивая и читая нужную информацию, то лучше всего воспользоваться методами класса RandomAccessFile.Каналы обмена информацией
В предыдущей главе мы видели, каких трудов стоит организовать правильный обмен информацией между подпроцессами. В пакете java.io есть четыре класса pipedxxx, облегчающие эту задачу. | В одном подпроцессе-источнике информации – создается объект класса PipedWriter+ или PipedOutputstream, в который записывается информация методами write () этих классов.Сериализация объектов
Методы классов ObjectlnputStream и ObjectOutputStream позволяют прочитать из входного байтового потока или записать в выходной байтовый поток данные сложных типов – объекты, массивы, строки – подобно тому, как методы классов Datainputstream и DataOutputstream читают и записывают данные простых типов.Печать в Java
Поскольку принтер – устройство графическое, вывод на печать очень похож на вывод графических объектов на экран. Поэтому в Java средства печати входят в графическую библиотеку AWT и в систему Java 2D. | В графическом компоненте кроме графического контекста – объекта класса Graphics, создается еще "печатный контекст".Печать средствами Java 2D
Расширенная графическая система Java 2D предлагает новые интерфейсы и классы для печати, собранные в пакет java.awt.print. Эти классы полностью перекрывают все стандартные возможности печати библиотеки AWT. Более того, они удобнее в работе и предлагают дополнительные возможности.Печать файла
Печать текстового файла заключается в размещении его строк в графическом контексте методом drawstring (). При этом необходимо проследить за правильным размещением строк в области печати и разбиением файла на страницы.Печать страниц с разными параметрами
Печать вида Printable Job не совсем удобна – у всех страниц должны быть одинаковые параметры, нельзя задать число страниц и порядок их печати, в окне Параметры страницы не видно число страниц, выводимых на печать. | Все эти возможности предоставляет печать вида Pageable Job с помощью класса Book.