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

2.4 Потоки в оперативной памяти

С оперативной памятью можно работать также как и с файлом (а точнее говоря, с потоком). Это очень удобно во многих случаях, в частности, файлы, отображаемые на память можно использовать для передачи данных между одновременно работающими потоками выполнения задачи. Кроме того, так как апплетам запрещено обращаться к файлам, расположенным на удаленном компьютере, на котором эти апплеты были запущены, то при необходимости создания временных потоков ввода и вывода (временных файлов) последние могут быть размещены в оперативной памяти.

В библиотеке классов Java есть три класса, специально предназначенных для создания потоков в оперативной памяти. Рассмотрим эти классы подробнее.

Класс ByteArrayOutputStream

Класс ByteArrayOutputStream создан не базе класса OutputStream. В нем имеется два конструктора:

public ByteArrayOutputStream();

public ByteArrayOutputStream(int size);

Первый конструктор создает выходной поток в оперативной памяти с начальным размером буфера, равным 32 байта. Второй позволяет указать необходимый размер буфера.

В классе ByteArrayOutputStream определено несколько достаточно полезных методов:

  • public void reset() - сбрасывает счетчик байтов, записанных в выходной поток. Если данные, записанные в поток, больше не нужны, то можно вызвать этот метод и использовать затем память, выделенную для потока, для записи других данных.

  • public int size() - с помощью этого метода можно определить количество байт данных, записанных в поток.

  • public byte[] toByteArray() - позволяет скопировать данные, записанные в поток, в массив байт. Этот метод возвращает ссылку на созданный для этой цели массив.

  • public void wtiteTo(OutputStream out) - с помощью этого метода можно скопировать содержимое данного потока в другой выходной поток, ссылка на который передается методу через параметр.

Для выполнения форматированного вывода в поток в оперативной памяти необходимо создать поток на базе класса DataOutputStream, передав соответствующему конструктору ссылку на поток класса ByteArrayOutputStream

Класс ByteArrayInputStream

С помощью класса ByteArrayInputStream можно создать входной поток на базе массива байтов, расположенного в оперативной памяти. В этом классе определено два конструктора:

public ByteArrayInputStream(byte buf[]);

public ByteArrayInputStream(byte buf[], int offset, int length);

Первый конструктор получает через единственный параметр ссылку на массив, который будет использован для создания входного потока. Второй позволяет дополнительно указать смещение offset и размер области памяти length, которая будет использована для создания потока.

Вот несколько методов, определенных в классе ByteArrayInputStream:

public int available();

public int read();

public int read(byte b[], int off, int len);

public void reset();

public long skip(long n);

Наиболее интересным является метод available(), с помощью которого можно определить, сколько байт имеется во входном потоке.

Обычно класс ByteArrayInputStream используется совместно с классом DataInputStream, что позволяет организовать форматный вывод данных.

Класс StringBufferInputStream

Класс StringBufferInputStream предназначен для создания входного потока на базе текстовой строки класса String. Ссылка на эту строку передается конструктору класса StringBufferInputStream через параметр:

public StringBufferInputStream(String s);

В классе StringBufferInputStream определены те же методы, что и в только что рассмотренном классе ByteArrayInputStream.

Для более удобной работы можно создать поток форматированных данных, для чего на базе потока класса StringBufferInputStream конструируется поток класса DataInputStream.

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