Java ByteArrayInputStream (Với các ví dụ)

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về Java ByteArrayInputStream và các phương thức của nó với sự trợ giúp của các ví dụ.

Các ByteArrayInputStreamlớp của java.iogói có thể được sử dụng để đọc một loạt các dữ liệu đầu vào (theo byte).

Nó mở rộng InputStreamlớp trừu tượng.

Lưu ý : Trong ByteArrayInputStream, luồng đầu vào được tạo bằng cách sử dụng mảng byte. Nó bao gồm một mảng bên trong để lưu trữ dữ liệu của mảng byte cụ thể đó.

Tạo ByteArrayInputStream

Để tạo luồng đầu vào mảng byte, java.io.ByteArrayInputStreamtrước tiên chúng ta phải nhập gói. Khi chúng tôi nhập gói, đây là cách chúng tôi có thể tạo luồng đầu vào.

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

Ở đây, chúng tôi đã tạo một luồng đầu vào đọc toàn bộ dữ liệu từ arrmảng. Tuy nhiên, chúng ta cũng có thể tạo luồng đầu vào chỉ đọc một số dữ liệu từ mảng.

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

Ở đây luồng đầu vào đọc số byte bằng chiều dài từ mảng bắt đầu từ vị trí bắt đầu.

Các phương thức của ByteArrayInputStream

Các ByteArrayInputStreamlớp học cung cấp triển khai cho các phương pháp khác nhau trình bày trong InputStreamlớp.

phương thức read ()

  • read() - đọc byte đơn từ mảng có trong luồng đầu vào
  • read(byte() array) - đọc các byte từ luồng đầu vào và lưu trữ trong mảng được chỉ định
  • read(byte() array, int start, int length) - đọc số byte bằng chiều dài từ luồng và lưu trữ trong mảng được chỉ định bắt đầu từ vị trí bắt đầu

Ví dụ: ByteArrayInputStream để đọc dữ liệu

 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(); ) ) ) 

Đầu ra

 Các byte được đọc từ luồng đầu vào: 1, 2, 3, 4, 

Trong ví dụ trên, chúng ta đã tạo một luồng đầu vào mảng byte có tên input.

 ByteArrayInputStream input = new ByteArrayInputStream(array); 

Ở đây, luồng đầu vào bao gồm tất cả dữ liệu từ mảng được chỉ định. Để đọc dữ liệu từ luồng đầu vào, chúng tôi đã sử dụng read()phương pháp.

phương thức sẵn có ()

Để lấy số byte có sẵn trong luồng đầu vào, chúng ta có thể sử dụng available()phương pháp. Ví dụ,

 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(); ) ) ) 

Đầu ra

 Số byte khả dụng ở đầu: 4 Số byte có sẵn ở cuối: 2 

Trong ví dụ trên,

  1. Chúng tôi đã sử dụng available()phương pháp để kiểm tra số lượng byte có sẵn trong luồng đầu vào.
  2. Sau đó chúng tôi đã sử dụng read()phương pháp này 2 lần để đọc 2 byte từ luồng đầu vào.
  3. Bây giờ, sau khi đọc 2 byte, chúng tôi đã kiểm tra các byte có sẵn. Lần này số byte có sẵn giảm đi 2.

phương thức bỏ qua ()

Để loại bỏ và bỏ qua số byte được chỉ định, chúng ta có thể sử dụng skip()phương pháp này. Ví dụ,

 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(); ) ) ) 

Đầu ra

 Luồng đầu vào sau khi bỏ qua 2 byte: 3, 4, 

Trong ví dụ trên, chúng ta đã sử dụng phương thức bỏ qua () để bỏ qua 2 byte dữ liệu từ luồng đầu vào. Do đó 1 và 2 không được đọc từ luồng đầu vào.

phương thức close ()

Để đóng luồng đầu vào, chúng ta có thể sử dụng close()phương pháp.

Tuy nhiên, close()phương thức không có hiệu lực trong ByteArrayInputStreamlớp. Chúng ta có thể sử dụng các phương thức của lớp này ngay cả sau khi close()phương thức được gọi.

Các phương pháp khác của ByteArrayInputStream

Phương pháp Mô tả
finalize() đảm bảo rằng close()phương thức được gọi
mark() đánh dấu vị trí trong luồng đầu vào mà dữ liệu đã được đọc
reset() trả lại điều khiển đến điểm trong luồng đầu vào nơi đánh dấu được đặt
markSupported() kiểm tra xem luồng đầu vào có hỗ trợ mark()reset()

Để tìm hiểu thêm, hãy truy cập Java ByteArrayInputStream (tài liệu Java chính thức).

thú vị bài viết...