| |
нный поток данных
InStream = new DataInputStream(
new BufferedInputStream(
new FileInputStream("output.txt")));
// Читаем одну строку из созданного входного потока
// и отображаем ее на консоли
System.out.println(InStream.readLine());
// Закрываем входной поток
InStream.close();
}
catch(Exception ioe)
{
System.out.println(ioe.toString());
}
// Ожидаем ввода с клавиатуры, а затем завершаем
// работу приложения
try
{
System.out.println(
"Press to terminate application...");
System.in.read(bKbdInput);
}
catch(Exception ioe)
{
System.out.println(ioe.toString());
}
}
}
Описание исходного текста приложения
Внутри метода main мы создали ссылки на выходной поток OutStream и входной
поток InStream:
DataOutputStream OutStream;
DataInputStream InStream;
Кроме того, мы предусмотрели массив для ввода информации из стандартного
входного потока:
byte bKbdInput[] = new byte[256];
Способ вывода приглашения и получения строки с клавиатуры ничем не
отличается от использованного в предыдущем приложении, поэтому для экономии
места мы не будем на нем останавливаться. Скажем только, что введенная строка
записывается в поле sOut типа String.
Создание выходного потока для записи строки выполняется следующим образом:
OutStream = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("output.txt")));
Вначале с помощью конструктора создается объект класса FileOutputStream -
поток, связанный с файлом output.txt. Далее на базе этого потока создается
буферизованный поток типа BufferedOutputStream. И, наконец, на базе
буферизованного потока создается форматированный поток OutStream класса
DataOutputStream.
Заметим, что конструктор класса FileOutputStream создает файл output.txt,
если он не существует, и перезаписывает существующий файл. Если вам нужно
исключить случайную перезапись существующего файла, необходимо воспользоваться
классом File, о котором мы еще будем рассказывать.
Для записи строки sOut в выходной поток мы вызываем метод writeBytes:
OutStream.writeBytes(sOut);
После записи выполняется сброс содержимого буферов и закрытие потока:
OutStream.flush();
OutStream.close();
При закрытии потока содержимое буферов сбрасывается автоматически. Мы
вызвали метод flush только для иллюстрации.
При работе с потоками могут возникать различные исключения. Наш обработчик
этих исключений просто записывает в стандратный поток вывода название
возникшего исключения:
catch(Exception ioe)
{
System.out.println(ioe.toString());
}
На следующем этапе приложение открывает файл output.txt для чтения
буферизованным форматированным потоком:
InStream = new DataInputStream(
new BufferedInputStream(
new FileInputStream("output.txt")));
В этой последовательности создания трех объектов различных классов для вас
нет ничего нового. Вначале мы создаем поток ввода, связанный с файлом, затем на
его базе - буферизованный входной поток, и, наконец, на базе буферизованного
входного потока - буферизованный форматированный входной поток.
Для чтения строки из входного потока мы применили метод readLine:
System.out.println(InStream.readLine());
Прочитанная строка сразу отображается на консоли, для чего она записывается
в стандартный поток вывода.
После завершения работы со входным потоком мы закрываем его методом close:
InStream.close();
На последнем этапе приложение ожидает ввода с клавиатуры и затем завершает
свою работу.
Потоки в оперативной памяти
Операционные системы Microsoft Windows 95 и Microsoft Windows NT
предоставляют возможность для программиста работать с оперативной памятью как с
файлом. Это очень удобно во многих случаях, в частности, файлы, отображаемые на
память, можно использовать для передачи данных между одновременно работающими
задачами и процессами. Подробнее об этом вы можете прочитать в 27 томе
“Библиотеки системного программиста”, который называется “Операционная система
Microsoft Windows NT для программиста. Часть 2”.
При создании приложений и аплетов Java вы также можете работать с объектами
оперативной памяти, как с файлами, а точнее говоря, как с потоками. Так как
аплетам запрещено обращаться к файлам, расположенным на локальном диске
компьютера, при небходимости создания временных потоков ввода или вывода
последние могут быть размещены в оперативной памяти.
Ранее мы отмечали, что в библиотеке классов Java есть три класса, специально
предназначенных для создания потоков в оперативной памяти. Это классы
ByteArrayOutputStream, ByteArrayInputStream и StringBufferInputStream.
Класс ByteArrayOutputStream
Класс ByteArrayOutputStream создан
|
|