Потоки даних

Хоча можливість читання і запису байтових потоків досить корисна, часто буває необхідно пересилати в потоці дані певного типу Інтерфейси DataInput і DataOutput визначають методи для пересилки примітивних типів Java в потоці Реалізація цих інтерфейсів за замовчуванням представлена ​​класами D ataInputStream і DataOutputStream Спочатку ми розглянемо інтерфейси, а потім їх реалізації

Інтерфейси для вхідних і вихідних потоків даних є практично дзеркальними відображеннями один одного У наведеній нижче таблиці містяться паралельні методи читання і запису для кожного з типів:

Read

Write

Тип

readBoolean

writeBoolean

boolean

readChar

writeChar

char

readByte

writeByte

byte

readShort

writeShort

short

readInt

writeInt

int

readLong

writeLong

long

readFloat

writeFloat

float

readDouble

writeDouble

double

readUTF

writeUTF

String у форматі UTF

UTF є скороченням від Unicode Transmission Format – символи Unicode переводяться в Unicode-1-1-UTF-8, компактну двійкову форму, спроектовану для кодування 16-розрядних символів Unicode в 8-розрядних байтах

Крім цих парних методів, DataInput містить кілька своїх власних:

public abstract void readFully(byte[]  buf) throws IOException

Читає послідовність байтів в buf, блокуючи роботу програми до завершення читання

public abstract void readFully(byte[]  b, int off, int len)  throws       IOException

Читає послідовність байтів в buf, починаючи з позиції offset, в кількості len байтів, якщо не зустрінеться кінець масиву buf Робота програми блокується до завершення читання всіх байтів

public abstract int skipBytes(int n) throws IOException

Пропускає байти в потоці Робота програми блокується до пропуску всіх n байтів public abstract String readLine() throws IOException

Читає рядок аж до перебування символів \ n, \ r або пари \ r \ n Символи, завершальні рядок, не включаються до неї При досягненні кінця вхідного потоку повертається null

public abstract int readUnsignedByte() throws IOException

Читають 8-розрядний байт без знака і повертає його у вигляді значення типу in t public abstract int readUnsignedShort() throws IOException

Читають 16-розрядне ціле типу short без знака і повертає його у вигляді значення типу

int, що дає число в діапазоні 0-65535 (2 16-1)

Інтерфейс DataInput обробляє зустрінутий кінець файлу, збуджуючи виняток

EOFException Клас EOFException є розширенням IOException

Інтерфейс DataOutput містить методи, сигнатури яких збігаються з сигнатурами трьох різновидів методу write класу OutputStream, і на додаток до них підтримує ще три методи:

public abstract void writeBytes(String  s) throws IOException

Записує рядок у вигляді послідовності байтів Старший байт кожного символу при цьому втрачається, так що даний метод слід застосовувати тільки для рядків, що містять символи в діапазоні від \ u0000 до \ u00ff, якщо тільки ви не готові змиритися з втратою даних

public abstract void writeChars(String  s) throws IOException

Записує рядок у вигляді послідовності значень типу char

Читання рядків, записаних цими методами, має здійснюватися циклічним викликом методу readChar, оскільки не існує методу readBytes або readChars, що повертає ту ж кількість символів, яке було записано методом writeBytes або writeChars Вам доведеться спочатку записати довжину рядка або скористатися спеціальним символом-маркером, що відзначає її кінець У першому випадку можна скористатися методом readFully, щоб вважати повний масив байтів, проте з writeChars це вже не спрацює, оскільки вам потрібні значення типу char, а не byte

11161 Класи потоків даних

Для кожного інтерфейсу Data є відповідний потік Крім того, клас RandomAccessFile реалізує обидва інтерфейсу для вхідних і вихідних потоків даних (див розділ Клас RandomAccessFile) Кожен з класів Data представляє собою розширення класу Filter, так що потоки даних можуть використовуватися для фільтрації інших потоків Отже, кожен з них повинен мати конструктори, які отримують як параметр другий вхідний або вихідний потік Наприклад, фільтрація може застосовуватися при запису даних у файл – для цього слід створити обєкт DataOutputStream до обєкта FileOutputStream, а потім, при зчитуванні даних з файлу, помістити DataInputStream перед обєктом FileInput Stream

Вправа 117

Включіть в клас Body з глави 2 метод, який записує вміст обєкта в DataOutputStream, і конструктор, який зчитує стан обєкту з DataInputStream

Джерело: Арнольд К, Гослінг Д – Мова програмування Java (1997)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*