Программирование на языке Java




Ввод/Вывод - часть 7


ByteArrayOutputStream

У класса ByteArrayOutputStream — два конструктора. Первая форма конструктора создает буфер размером 32 байта. При использовании второй формы создается буфер с размером, заданным параметром конструктора (в приведенном ниже примере — 1024 байта):

OutputStream out0 = new ByteArrayOutputStream();

OutputStream out1 = new ByteArrayOutputStream(1024);

В очередном примере объект ByteArrayOutputStream заполняется символами, введенными с клавиатуры, после чего с ним выполняются различные манипуляции.

import java.io.*;

import java.util.*;

class ByteArrayOutputStreamS {

public static void main(String args[]) throws Exception {

int i;

ByteArrayOutputStream f0 = new ByteArrayOutputStream(12);

System.out.println("Enter 10 characters and a return");

while (f0.size() != 10) {

f0.write( System.in.read());

}

System.out.println("Buffer as a string");

System.out.println(f0.toString());

System.out.println ("Into array");

byte b[] = f0.toByteArray();

for (i=0; i < b.length; i++) {

System.out.print((char) b[i]);

}

System.out.println();

System.out. println("To an OutputStream()");

OutputStream f2 = new File0utput8tream("test.txt");

f0.writeTo(f2);

System.out.println("Doing a reset");

f0. reset();

System.out.println("Enter 10 characters and a return");

while (f0.size() != 10) {

f0.write (System.in.read());

}

System.out.println("Done.");

} }

Заглянув в созданный в этом примере файл test.txt, мы увидим там именно то, что ожидали:

С:\> type test.txt

0123456789

StringBufferlnputStream

StringBufferInputStream идентичен классу ByteArrayInputStream с тем исключением, что внутренним буфером объекта этого класса является экземпляр String, а не байтовый массив. Кроме того, в Java нет соответствующего ему класса StringBufferedOutputStream. У этого класса есть единственный конструктор:

StringBufferInputStream( String s)

Фильтруемые потоки

При работе системы вывода в среде с параллельными процессами при отсутствии синхронизации могут возникать неожиданные результаты. Причиной этого являются попытки различных подпроцессов одновременно обратиться к одному и тому же потоку. Все конструкторы и методы, имеющиеся в этом классе, идентичны тем, которые есть в классах InputStream и OutputStream, единственное отличие классов фильтруемых потоков в том, что их методы синхронизованы.




Содержание  Назад  Вперед