Lớp Trừu Tượng OutputStream

OutputStream là một lớp trừu tượng cơ bản trong Java đại diện cho một luồng dữ liệu đầu ra, cho phép bạn ghi dữ liệu vào nhiều đích khác nhau. Nó cung cấp một giao diện chung cho việc đọc dữ liệu, bất kể nguồn dữ liệu là gì - có thể là một file, mảng byte, thiết bị ngoại vi, hoặc bất kỳ nguồn nào khác.

Cú pháp khai báo lớp trừu tượng OutputStream

Cú pháp

public abstract class OutputStream
extends Object
implements Closeable, Flushable

Dưới đây là giải thích chi tiết về cú pháp khai báo này:

↳ public: Lớp OutputStream có phạm vi truy cập public, nghĩa là có thể được truy cập từ bất kỳ đâu trong chương trình.

↳ abstract: Đây là một lớp trừu tượng, có nghĩa là nó không thể được khởi tạo trực tiếp mà chỉ có thể được mở rộng (extend) bởi các lớp con. Các lớp con phải triển khai các phương thức cần thiết để thực hiện chức năng ghi dữ liệu.

↳ class OutputStream: Đây là tên của lớp. OutputStream thuộc gói java.io và là lớp nền tảng để ghi dữ liệu ra nhiều nguồn khác nhau như tệp, mảng byte hoặc kết nối mạng.

↳ extends Object: OutputStream kế thừa từ lớp Object, là lớp cơ sở của tất cả các lớp trong Java. Điều này có nghĩa là OutputStream thừa hưởng các phương thức cơ bản của lớp Object, chẳng hạn như toString(), equals(), và hashCode().

↳ implements Closeable: Lớp OutputStream thực thi giao diện Closeable, nghĩa là nó có phương thức close(), giúp đóng luồng và giải phóng tài nguyên hệ thống. Khi sử dụng OutputStream, bạn nên gọi close() để tránh rò rỉ tài nguyên. Điều này cũng hỗ trợ try-with-resources, giúp tự động đóng luồng khi khối try kết thúc.

↳ implements Flushable: Lớp OutputStream cũng thực thi giao diện Flushable, nghĩa là nó có phương thức flush(). Phương thức flush() đẩy hết dữ liệu trong bộ đệm xuống đích (ví dụ: file hoặc socket). Điều này rất quan trọng khi làm việc với dữ liệu được lưu trữ tạm thời trong bộ nhớ đệm trước khi ghi vào tệp hoặc mạng.

Các phương thức lớp trừu tượng OutputStream

Các phương thức của lớp OutputStream trong Java cung cấp các chức năng cơ bản để để ghi dữ liệu vào một luồng đầu ra, từ việc ghi một byte đơn lẻ đến việc ghi toàn bộ mảng byte. Phương thức flush() đảm bảo rằng dữ liệu được ghi ra ngay lập tức, trong khi phương thức close() đóng luồng và giải phóng tài nguyên. Dưới đây là danh sách tất cả các phương thức của lớp OutputStream trong Java:

↳ void close(): Đóng luồng đầu ra và giải phóng tài nguyên liên quan.

↳ void flush(): Buộc luồng đầu ra ghi tất cả dữ liệu được đệm ra đích.

↳ void write(byte[] b): Ghi toàn bộ mảng byte b vào luồng đầu ra.

↳ void write(byte[] b, int off, int len): Ghi một phần của mảng byte b vào luồng đầu ra, bắt đầu từ vị trí off và ghi len byte.

↳ abstract void write(int b): Ghi một byte dữ liệu (dưới dạng số nguyên) vào luồng đầu ra.

Các lớp con kế thừa trực tiếp từ lớp trừu tượng OutputStream trong Java

Các lớp con của OutputStream mở rộng khả năng ghi dữ liệu ra các đích khác nhau và cung cấp sự linh hoạt trong việc xử lý dữ liệu. Tùy vào nhu cầu cụ thể của ứng dụng, bạn có thể chọn lớp con phù hợp để thực hiện các thao tác ghi dữ liệu. Dưới đây là danh sách các lớp con trực tiếp và các lớp liên quan đến OutputStream, kèm theo mô tả ngắn gọn về từng lớp:

↳ ByteArrayOutputStream: Cho phép ghi dữ liệu vào một mảng byte trong bộ nhớ, thay vì một đích vật lý. Điều này hữu ích khi bạn cần thao tác với dữ liệu tạm thời trước khi xử lý thêm.

↳ FileOutputStream: Được sử dụng để ghi dữ liệu trực tiếp vào một file trên hệ thống tập tin. Đây là cách đơn giản và phổ biến để lưu trữ dữ liệu dưới dạng file.

↳ FilterOutputStream: Lớp cơ sở cho các luồng đầu ra có tính năng lọc (filtering). Các lớp con của FilterOutputStream cung cấp các tính năng bổ sung như bộ đệm và xử lý kiểu dữ liệu.

↳ BufferedOutputStream: Sử dụng bộ đệm để tăng hiệu suất ghi dữ liệu, giúp giảm số lần truy cập trực tiếp vào đích.

↳ DataOutputStream: Hỗ trợ ghi các kiểu dữ liệu nguyên thủy (như int, float, long, v.v.) vào luồng đầu ra, đảm bảo rằng dữ liệu được định dạng chính xác và có thể được đọc lại bằng DataInputStream.

↳ PrintStream: Cung cấp phương thức ghi dữ liệu ra file hoặc console, với khả năng tự động làm trống bộ đệm sau mỗi lần ghi một dòng.

↳ ObjectOutputStream: Cho phép ghi các đối tượng Java đã được tuần tự hóa (serialization) vào luồng đầu ra. Điều này rất hữu ích khi bạn cần lưu trữ hoặc truyền tải các đối tượng giữa các hệ thống hoặc qua mạng.

↳ PipedOutputStream: Ghi dữ liệu vào một luồng ống (pipe), cho phép truyền dữ liệu giữa các luồng (threads) trong cùng một ứng dụng. Dữ liệu được ghi vào PipedOutputStream có thể được đọc bởi PipedInputStream ở luồng khác.

Các lớp con kế thừa từ OutputStream trong Java - minh họa
Ảnh mô tả các lớp con kế thừa trực tiếp từ lớp trừu tượng OutputStream.

Câu Nói Truyền Cảm Hứng

“Bắt đầu ở đâu không quan trọng, quan trọng là bạn sẵn sàng bắt đầu.” – W. Clement Stone

Không Gian Tích Cực

“Chúc bạn luôn giữ vững niềm tin và sức mạnh để vượt qua mọi thử thách trong cuộc sống.”