Главная » Java » Класс OutputStream

0

Абстрактный класс OutputStream во многих отношениях напоминает InputStream; он абстрагирует поток байтов, направляемых в приемник. Класс содержит следующие методы:

public OutputStream()

содержит только безаргументный конструктор. public abstract void write(int b) throws IOException

Записывает в поток байт b. Байт передается в виде значения int, поскольку он часто является результатом арифметической  операции над байтами. Выражения, в которых входят данные типа byte, имеют тип int, так что параметр типа int позволяет использовать результат без преобразования в byte. Тем не менее обратите внимание на то, что передаются только младшие 8 бит значения int — старшие 24 бита при этом теряются. Метод блокирует работу программы до завершения записи байта.

public void write(byte[] buf) throws IOException

Записывает в поток содержимое массива байтов. Метод блокирует работу программы до завершения записи.

public void write(byte[] buf, int offset, int len)  throws       IOException

Записывает в поток часть массива байтов, которая начинается с buf [offset] и насчитывает до count байтов, если ранее не будет встречен конец массива.

public void flush() throws IOException

Очищает поток, то есть направляет в него все байты, находящиеся в буфере. public void close() throws IOException

Закрывает поток. Метод должен вызываться для освобождения любых ресурсов,

связанных с потоком.

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

Ниже приводится приложение, копирующее свой входной поток в выходной и попутно заменяющее некоторые символы. Приложение Translate получает два параметра: строку from и строку to. Если во входном потоке встречается символ, входящий в строку from, он заменяется символом строки to, находящимся в той же позиции:

import java.io.*;

class Translate {

public static void main(String[] args) { InputStream in = System.in; OutputStream out = System.out;

if (args.length != 2)

error ("must provide from/to arguments");

String from = args[0], to = args[1];

int ch, i;

if (from.length() != to.length())

error ("from and to must be same length");

try {

while ((ch = in.read()) != 1) {

if ((i = from.indexOf(ch)) != -1)

out.write(to.charAt(i));

else

}

out.write(ch);

} catch (IOException e) {

error ("I/O Exception: " + e);

}

}

public static void error(String err) { System.err.print("Translate: " + err); System.exit(1);  // ненулевое значение означает

// неблагополучное завершение

}

}

Упражнение 11.1

Перепишите приведенную выше программу Translate в виде метода, который пересылает символы из InputStream в OutputStream, а метод трансляции (правило замены символов) и потоки являются параметрами. Для каждого типа InputStream и OutputStream, о

которых говорилось в этой главе, напишите новый метод main, в котором бы учитывалась возможность трансляции символов при вводе или выводе. Если потоки ввода и вывода оказываются симметричными, то для них может применяться общий метод main.

Источник: Арнольд К., Гослинг Д. – Язык программирования Java (1997)

По теме:

  • Комментарии