Руководство по Java Core. Файлы и работа с ними. ByteArrayInputStream.

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

Этот класс имеет такие методы:

  • public int read () throws IOException
    Этот метод читает каждый следующий байт из входного потока. Возвращает int-овое значение как следующий байт. Конец файла обозначается, как -1.
  • public int read (byte [] r, int off, int len) throws IOException
    Этот метод читает массив байтов из входного потока от off до len. Возвращает общее количество прочитанных байтов. Конец файла обозначается, как -1.
  • public int available() throws IOException
    Возвращает количество байтов, доступных для чтения в указанном входном потоке.
  • public void mark (int read) throws IOException
    Этот метод устанавливает текующую отмеченную позицию в потоке. Устанавливает максимальное количество байтов, которое может быть прочитано перед тем, как отмеченное место станет недоступным.
  • public long skip (long n) throws IOException
    Пропускает чтение указанного количества байтов. Возвращает общее количество пропущенных байтов.

Давайте рассмотрим как это работает на практике на примере простого приложения.

Пример:


import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class ByteArrayInputStreamDemo {
    public static void main(String[] args) throws IOException {
        ByteArrayOutputStream byteArrayOutputStream =
                new ByteArrayOutputStream(20);
        
        System.out.println("Enter the string (up to 12 elements): ");
        while (byteArrayOutputStream.size() != 13) {
            byteArrayOutputStream.write(System.in.read());
        }

        byte[] byteArray = byteArrayOutputStream.toByteArray();
        System.out.println("Byte Array: ");
        for(byte b: byteArray){
            System.out.print((char) b + " ");
        }

        System.out.println("\n=======================\n");

        int i;

        ByteArrayInputStream byteArrayInputStream =
                new ByteArrayInputStream(byteArray);

        System.out.println("Now we will convert all elements of array to lower case: ");

        while ((i = byteArrayInputStream.read())!=-1){
            System.out.print(Character.toLowerCase((char)i));
        }
        byteArrayInputStream.close();
    }
}

В результате работы программы мы получим, примерно, следующий результат:


/*Some system messages*/
Enter the string (up to 12 elements): 
This is test
Byte Array: 
T h i s   i s   t e s t 
 
=======================

Now we will convert all elements of array to lower case: 
this is test


В этом уроке мы рассмотрели основы работы с классом ByteArrayInputStream.