Lớp PipedInputStream
(Class PipedInputStream)
Lớp PipedInputStream kế thừa từ InputStream và được sử dụng để kết nối với một luồng đầu ra được tạo bởi PipedOutputStream. Khi đó, PipedInputStream sẽ cung cấp các byte dữ liệu được ghi vào luồng đầu ra tương ứng. Thông thường, dữ liệu được đọc từ một đối tượng PipedInputStream bởi một luồng (thread) và dữ liệu được ghi vào PipedOutputStream tương ứng bởi một luồng khác. Việc sử dụng cả hai đối tượng từ cùng một luồng là không được khuyến khích vì có thể dẫn đến tình trạng deadlock, tức là luồng bị khóa vĩnh viễn.
PipedInputStream có chứa một bộ đệm (buffer) để tách biệt các hoạt động đọc và ghi trong một giới hạn nhất định. Nếu luồng đang cung cấp các byte dữ liệu cho PipedOutputStream kết nối không còn hoạt động, ống dẫn (pipe) được coi là bị hỏng (broken).
Khai báo lớp PipedInputStream trong Java
Để sử dụng lớp PipedInputStream, bạn cần import gói java.io bạn cần thêm câu lệnh import vào đầu file Java của mình. Gói này cung cấp các lớp và giao diện để thực hiện các hoạt động nhập xuất (I/O) trong Java.
Cú pháp câu lệnh import:
Cú pháp
import java.io.PipedInputStream;
Cú pháp khai báo lớp PipedInputStream:
Cú pháp
public class PipedInputStream
extends InputStream
Dưới đây là giải thích chi tiết về cú pháp khai báo này:
↳ public class PipedInputStream: Đây là khai báo một lớp công khai (public) tên là PipedInputStream. Lớp này có thể được truy cập từ bất kỳ đâu trong dự án Java, miễn là nó được import hoặc ở cùng gói.
↳ extends InputStream: Điều này có nghĩa là lớp PipedInputStream kế thừa từ lớp InputStream. InputStream là một lớp cơ sở trừu tượng trong Java đại diện cho một luồng dữ liệu đầu vào. Lớp này cung cấp các phương thức để đọc dữ liệu từ luồng đầu vào. Khi PipedInputStream kế thừa từ InputStream, nó thừa hưởng tất cả các phương thức của InputStream và có thể sử dụng hoặc ghi đè (override) các phương thức đó.
Các trường (fields) của lớp PipedInputStream
Lớp PipedInputStream có các trường sau để quản lý dữ liệu và trạng thái của luồng:
↳ Trường protected byte[] (buffer): Là một mảng byte (byte[]) được sử dụng làm bộ đệm vòng tròn (circular buffer) để lưu trữ dữ liệu đến từ PipedOutputStream. Kích thước mặc định của bộ đệm được xác định bởi hằng số PIPE_SIZE.
↳ Trường protected int (in): Là một số nguyên (int) chỉ số vị trí trong bộ đệm buffer mà byte dữ liệu tiếp theo sẽ được lưu trữ khi nhận được từ PipedOutputStream.
↳ Trường protected int (out): Là một số nguyên (int) chỉ số vị trí trong bộ đệm buffer mà byte dữ liệu tiếp theo sẽ được đọc bởi PipedInputStream.
↳ Trường protected static int (PIPE_SIZE): Là một hằng số tĩnh (static) xác định kích thước mặc định của bộ đệm vòng tròn.
Các constructor của lớp PipedInputStream
Lớp PipedInputStream có bốn constructor để tạo đối tượng và thiết lập kết nối với PipedOutputStream.
↳ PipedInputStream(): Tạo một PipedInputStream chưa được kết nối với PipedOutputStream. Sử dụng kích thước bộ đệm mặc định.
↳ PipedInputStream(int pipeSize): Tạo một PipedInputStream chưa được kết nối với PipedOutputStream. Sử dụng kích thước bộ đệm tùy chỉnh được chỉ định bởi tham số pipeSize.
↳ PipedInputStream(PipedOutputStream src): Tạo một PipedInputStream và kết nối nó với PipedOutputStream được chỉ định. Sử dụng kích thước bộ đệm mặc định.
↳ PipedInputStream(PipedOutputStream src, int pipeSize): Tạo một PipedInputStream và kết nối nó với PipedOutputStream được chỉ định. Sử dụng kích thước bộ đệm tùy chỉnh được chỉ định bởi tham số pipeSize.
Các phương thức của lớp PipedInputStream
Lớp PipedInputStream cung cấp các phương thức để đọc dữ liệu từ luồng đầu vào được kết nối. Dưới đây là danh sách tất cả các phương thức của lớp PipedInputStream trong Java:
↳ int read(byte[] b): Đọc một số byte từ luồng đầu vào và lưu vào mảng byte b.
↳ int read(byte[] b, int off, int len): Đọc tối đa len byte từ luồng đầu vào vào mảng byte b bắt đầu từ vị trí off.
↳ int read(): Đọc một byte từ luồng đầu vào.
↳ void close(): Đóng luồng đầu vào và giải phóng tài nguyên.
↳ int available(): Trả về số byte tối đa có thể đọc được mà không bị chặn.
↳ void connect(PipedOutputStream src): Kết nối PipedInputStream với PipedOutputStream được chỉ định.
↳ protected void receive(int b): Phương thức này được sử dụng để nhận một byte dữ liệu từ PipedOutputStream.