Java ByteArrayInputStream (з прикладами)

У цьому посібнику ми дізнаємося про Java ByteArrayInputStream та її методи за допомогою прикладів.

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

Це розширює InputStreamабстрактний клас.

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

Створіть ByteArrayInputStream

Для того, щоб створити вхідний потік масиву байтів, java.io.ByteArrayInputStreamспочатку потрібно імпортувати пакет. Як тільки ми імпортуємо пакет, ось як ми можемо створити вхідний потік.

 // Creates a ByteArrayInputStream that reads entire array ByteArrayInputStream input = new ByteArrayInputStream(byte() arr); 

Тут ми створили вхідний потік, який зчитує цілі дані з arrмасиву. Однак ми також можемо створити вхідний потік, який зчитує лише деякі дані з масиву.

 // Creates a ByteArrayInputStream that reads a portion of array ByteArrayInputStream input = new ByteArrayInputStream(byte() arr, int start, int length); 

Тут вхідний потік зчитує кількість байтів, рівну довжині з масиву, починаючи з початкової позиції.

Методи ByteArrayInputStream

ByteArrayInputStreamКлас забезпечує реалізації для різних методів представлення в InputStreamкласі.

метод read ()

  • read() - зчитує єдиний байт із масиву, що присутній у вхідному потоці
  • read(byte() array) - зчитує байти з вхідного потоку і зберігає у вказаному масиві
  • read(byte() array, int start, int length) - зчитує кількість байтів, рівних довжині, з потоку і зберігає у вказаному масиві, починаючи з початку позиції

Приклад: ByteArrayInputStream для читання даних

 import java.io.ByteArrayInputStream; public class Main ( public static void main(String() args) ( // Creates an array of byte byte() array = (1, 2, 3, 4); try ( ByteArrayInputStream input = new ByteArrayInputStream(array); System.out.print("The bytes read from the input stream: "); for(int i= 0; i < array.length; i++) ( // Reads the bytes 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()) ( // Creates an array of bytes byte() array = ( 1, 2, 3, 4 ); try ( ByteArrayInputStream input = new ByteArrayInputStream(array); // Returns the available number of bytes System.out.println("Available bytes at the beginning: " + input.available()); // Reads 2 bytes from the input stream input.read(); input.read(); // Returns the available number of bytes System.out.println("Available bytes at the end: " + input.available()); input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Вихідні дані

 Доступні байти на початку: 4 Доступні байти в кінці: 2 

У наведеному вище прикладі

  1. Ми використали available()метод для перевірки кількості доступних байт у вхідному потоці.
  2. Потім ми використовували read()метод 2 рази, щоб прочитати 2 байти з вхідного потоку.
  3. Тепер, прочитавши 2 байти, ми перевірили доступні байти. Цього разу доступні байти зменшились на 2.

метод skip ()

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

 import java.io.ByteArrayInputStream; public class Main ( public static void main(String args()) ( // Create an array of bytes byte() array = ( 1, 2, 3, 4 ); try ( ByteArrayInputStream input = new ByteArrayInputStream(array); // Using the skip() method input.skip(2); System.out.print("Input stream after skipping 2 bytes: "); int data = input.read(); while (data != -1) ( System.out.print(data + ", "); data = input.read(); ) // close() method 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()

Щоб дізнатись більше, відвідайте Java ByteArrayInputStream (офіційна документація Java).

Цікаві статті...