English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве мы будем изучать примеры с использованием ByteArrayInputStream и его методов в Java.
Класс ByteArrayInputStream пакета java.io можно использовать для чтения массива вводных данных (в байтах).
Он наследует абстрактный класс InputStream.
Примечание: В 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 предоставляет реализацию различных методов из класса InputStream.
read() - чтение одного байта из существующего в потоке массива
read(byte[] array) - чтение байт из потока и хранение их в указанном массиве
read(byte[] array, int start, int length) - чтение равного length байт из потока и хранение их в указанном массиве с начала позиции start
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(). Например
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
В этом примере:
Мы уже использовали метод available(), чтобы проверить количество доступных байт в流入.
Затем мы используем метод read() два раза, чтобы прочитать 2 байта из流入.
Теперь, после чтения 2 байт, мы проверили количество доступных байт. В этот раз количество доступных байт уменьшилось на 2.
Чтобы пропустить и перейти к указанным байтам, можно использовать метод 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() в классе ByteArrayInputStream не работает. Даже после вызова метода close() мы можем использовать методы этого класса.
метод | описание содержимого |
---|---|
finalize() | обеспечить вызов метода close() |
mark() | маркировать положение уже считанных данных в входном потоке |
reset() | возврат контроллера к точке в входном потоке, в которой был установлен маркер |
markSupported() | проверка, поддерживает ли входной поток mark() и reset() |