English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Учебник по основам Java

Контроль потока Java

Массив Java

Ориентированность на объекты Java (I)

Ориентированность на объекты Java (II)

Ориентированность на объекты Java (III)

Обработка исключений в Java

Список (List) Java

Queue (очередь) Java

Сборка Map Java

Сборка Set Java

Входной/выходной поток (I/O) Java

Reader/Writer Java

Другие темы Java

класс Java ByteArrayInputStream

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

Класс ByteArrayInputStream пакета java.io можно использовать для чтения массива вводных данных (в байтах).

Он наследует абстрактный класс InputStream.

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

Создание ByteArrayInputStream

Для создания InputStream с массивом байт необходимо сначала импортировать пакет java.io.ByteArrayInputStream. После импорта пакета можно создать поток ввода.

// Создание ByteArrayInputStream для чтения всего массива
ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr);

Здесь мы создали поток ввода, который читает все данные из массива arr. Однако, мы также можем создать поток ввода, который читает только часть данных из массива.

// Создание ByteArrayInputStream для чтения части массива
ByteArrayInputStream input = new ByteArrayInputStream(byte[] arr, int start, int length);

Здесь поток читает из позиции start массива равное length байт.

Методы класса ByteArrayInputStream

Класс ByteArrayInputStream предоставляет реализацию различных методов из класса InputStream.

Метод read()

  • read() - чтение одного байта из существующего в потоке массива

  • read(byte[] array) - чтение байт из потока и хранение их в указанном массиве

  • read(byte[] array, int start, int length) - чтение равного length байт из потока и хранение их в указанном массиве с начала позиции start

Пример: чтение данных с помощью ByteArrayInputStream

import java.io.ByteArrayInputStream;
public class Main {
  public static void main(String[] args) {
    // Создать массив байтов
    byte[] array = {1, 2, 3, 4};
    try {
      ByteArrayInputStream input = new ByteArrayInputStream(array);
      System.out.print("Считываемые из потока байты:");
      for(int i = 0; i < array.length; i++) {
        // Чтение байт
        int data = input.read();
        System.out.print(data + ", ");
      }
      input.close();
    }
    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

результат вывода

Чтенные из流入 байты: 1, 2, 3, 4,

В этом примере мы создали массивный поток ввода input.

ByteArrayInputStream input = new ByteArrayInputStream(array);

Здесь流入 включает все данные из указанного массива. Чтобы прочитать данные из流入, мы используем метод read().

Метод available()

Чтобы получить количество доступных байт в流入, можно использовать метод available(). Например

import java.io.ByteArrayInputStream;
public class Main {
  public static void main(String args[]) {
    // Создание массива байтов
    byte[] array = { 1, 2, 3, 4 };
    try {
      ByteArrayInputStream input = new ByteArrayInputStream(array);
      // Возвращает количество доступных байт
      System.out.println("Количество доступных байт в начале: " + input.available());
      // Чтение двух байт из流入
      input.read();
      input.read();
      // Возвращает количество доступных байт
      System.out.println("Количество доступных байт в конце: " + input.available());
      input.close();
    }
    catch (Exception e) {
      e.getStackTrace();
    }
  }
}

результат вывода

Количество доступных байт в начале: 4
Количество доступных байт в конце: 2

В этом примере:

  1. Мы уже использовали метод available(), чтобы проверить количество доступных байт в流入.

  2. Затем мы используем метод read() два раза, чтобы прочитать 2 байта из流入.

  3. Теперь, после чтения 2 байт, мы проверили количество доступных байт. В этот раз количество доступных байт уменьшилось на 2.

Метод skip()

Чтобы пропустить и перейти к указанным байтам, можно использовать метод skip(). Например

import java.io.ByteArrayInputStream;
public class Main {
  public static void main(String args[]) {
    // Создать массив байтов
    byte[] array = { 1, 2, 3, 4 };
    try {
      ByteArrayInputStream input = new ByteArrayInputStream(array);
      // Использование метода skip()
      input.skip(2);
      System.out.print("Пропустить 2 байта в流入: ");
      int data = input.read();
      while (data != -1) {
        System.out.print(data + ", ");
        data = input.read();
      }
      // close() метод
      input.close();
    }
    catch (Exception e) {
      e.getStackTrace();
    }
  }
}

результат вывода

входной поток после пропуска 2 байт: 3, 4,

в примере выше мы используем метод skip() для пропуска 2 байт данных в входном потоке. Поэтому данные 1 и 2 не будут считаны из входного потока.

метод close()

чтобы закрыть входной поток, можно использовать метод close()

но метод close() в классе ByteArrayInputStream не работает. Даже после вызова метода close() мы можем использовать методы этого класса.

другие методы ByteArrayInputStream

методописание содержимого
finalize()обеспечить вызов метода close()
mark()маркировать положение уже считанных данных в входном потоке
reset()возврат контроллера к точке в входном потоке, в которой был установлен маркер
markSupported()проверка, поддерживает ли входной поток mark() и reset()