Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_Po_Tp.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.44 Mб
Скачать

2.3.2 Запись данных в поток и чтение их из потока

Для обмена данными с потоками можно использовать как методы write() и read(), так и методы, допускающие ввод или вывод форматированных данных. В зависимости от того, на базе какого класса создан поток, зависит набор доступных методов, предназначенных для чтения или записи данных.

Простейшие методы.

Для выходного потока на базе класса FileOutputStream можно использовать для записи в него 3 разновидности метода write():

  • public void write(byte b[]) - записывает в поток содержимое массива (длиной b.length байт), ссылка на который передается через параметр, начиная с текущей позиции в потоке (после выполнения текущая позиция продвигается вперед).

  • public void write(byte b[], int off, int len) - позволяет дополнительно указать начальное смещение off записываемого блока данных в массиве и колтчество записываем байт len массива.

  • public void write(int b) - просто записывает в поток 1 байт данных.

Если в процессе записи происходит ошибка, то возникает исключение IOException.

Для входного потока на базе класса FileInputStream можно использовать для чтения из него 3 разновидности метода read():

  • public int read() - просто читает из потока 1 байт данных. Если достигнут конец файла, товозвращается значение -1.

  • public int read(byte b[]) - читает данные в массив, причем количество прочитанных данных определяется размером массива (b.lenght байтов). Метод возвращает количество прочитанных байтов данных или значение -1, если в процессе чтения был достигнут конец файла.

  • public int read(byte b[], int off, int len) - читает данные в область массива, заданную своим смещением и длиной.

Если в процессе чтения происходит ошибка, то возникает исключение IOException.

Методы для чтения и записи форматированных данных.

Классы DataOutputStream и DataInputStream предлагают более удобные методы для записи и чтения из потока, допускающие форматированный вывод и ввод данных.

Вот, например, какой набор методов можно использовать для записи форматированных данных в поток класса DatаOutputStream:

public final void writeBoolean(boolean v);

public final void writeByte(int v);

public final void writeBytes(String s);

public final void writeChar(int v);

public final void writeChars(String s);

public final void writeDouble(double v);

public final void writeFloat(float v);

public final void writeInt(int v);

public final void writeLong(long v);

public final void writeShort(int v);

public final void writeUTF(String str);

Хотя имена этих методов говорят сами за себя, сделаем несколько замечаний. Метод writeByte() записывает в поток 1 байт (младший байт параметра v). В отличие от метода writeByte() метод writeChar() записывает в поток двухбайтовое символьное значение в кодировке Unicode.

Если необходимо записать в выходной поток текстовую строку, то это можно сделать с помощью методов writeBytes(), writeChars() или writeUTF(). Первый метод записывает в выходной поток только младшие байты символов, второй - двухбайтовые символы в кодировке Unicode, третий предназначен для записи строки в машинно-независимой кодировке UTF-8.

Все перечисленные выше методы в случае возникновения ошибки создают исключение IOException, которое необходимо обработать.

Для чтения форматированных данных из потока класса DatаInputStream используются следующие методы:

public final boolean readBoolean();

public final byte readByte();

public final char readChar();

public final double readDouble();

public final float readFloat();

public final void readFully(byte b[]);

public final void readFully(byte b[], int off, int len);

public final int readInt();

public final String readLine();

public final long readLong();

public final short readShort();

public final int readUnsignedByte();

public final int readUnsignedShort();

public final String readUTF();

public final static String readUTF(DataInput in);

public final int skipBytes(int n);

Следует обратить внимание на то, что среди этих методов нет тех, что специально предназначены для чтения данных, записанных из строк методами writeBytes() и writeChars() класса DataOutputStream.

Тем не менее, если входной поток состоит из отдельных строк, разделенных символами возврата каретки и перевода чтроки, то такие строки можно получить методом readLine(), например:

String s="",ss;

while((ss=dataIn.readLine())!=null) s=s+ss+"\r\n";

Также можно воспользоваться методом readFully, который заполняет массив байтов. Этот массив потом нетрудно преобразовать в строку типа String, так как в классе String предусмотрен соответствующий конструктор.

Отметим также метод skipBytes(), который позволяет пропустить из входного потока заданное количество байт.

Методы класса DataInputStream, предназначенные для чтения данных, могут создавать исключения IOException и EOFException. Первое из них возникает в процессе ошибки, второе - при достижении конца входного пока в процессе чтения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]