Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
deprecated, поскольку работа с кодировками требует особого подхода (зачастую у двухбайтовых символов Java старший байт просто отбрасывается). Поэтому в версии Java 1.1 появился дополнительный набор классов, основывающийся на типах Reader и Writer. Они будут рассмотрены позже. В частности, вместо PrintStream теперь рекомендуется применять PrintWriter. Однако старый класс продолжает активно использоваться, поскольку статические поля out и err класса System имеют именно этот тип.
DatalnputStream и DataOutputStream
До сих пор речь шла только о считывании и записи в поток данных в виде byte. Для работы с другими примитивными типами данных Java определены интерфейсы Datalnput и DataOutput и их реализации -классы-фильтры DatalnputStream и DataOutputStream. Их место в иерархии классов ввода/вывода можно увидеть на рис. 15.1.
Интерфейсы Datalnput и DataOutput определяют, а классы DatalnputStream и DataOutputStream, соответственно, реализуют методы считывания и записи значений всех примитивных типов. При этом происходит конвертация этих данных в набор byte и обратно. Чтение необходимо организовать так, чтобы данные запрашивались в виде тех же типов, в той же последовательности, как и производилась запись. Если записать, например, int и long, а потом считывать их как short, чтение будет выполнено корректно, без исключительных ситуаций, но числа будут получены совсем другие.
Это наглядно показано в следующем примере:
try {
ByteArrayOutputStream out = new ByteArrayOutputStream(); DataOutputStream outData = new DataOutputStream(out); outData.writeByte(128);
// этот метод принимает аргумент int, но записывает
// лишь младший байт
outData.writelnt(128);
outData.writeLong( 128);
outData.writeDouble(128);
outData. closeO;
byte[] bytes = out.toByteArrayO; InputStream in = new ByteArraylnputStream(bytes); DatalnputStream inData = new DatalnputStream(in); System.out.println("4TeHne в правильной последовательности: "); System.out.println("readByte: " + inData.readByte()); System.out.printlnf'readlnt: " + inData.readlntO); System.out.printlnfreadLong: " + inData.readLongO); System.out.printlnfreadDouble: " + inData.readDouble()); inData.close();
System.ои!рппт1п("Чтение в измененной последовательности:");