Lớp DataOutputStream
(Class DataOutputStream)

DataOutputStream là một lớp con của FilterOutputStream và triển khai các giao diện Closeable, DataOutput, Flushable, và AutoCloseable. Lớp này cho phép một ứng dụng ghi các kiểu dữ liệu nguyên thủy thủy như boolean, char, byte, short, int, long, float, double và chuỗi theo định dạng UTF-8 của Java vào một luồng đầu ra theo cách di động (portable). Sau đó, một ứng dụng khác có thể sử dụng DataInputStream để đọc lại dữ liệu đã được ghi.

Khai báo lớp DataOutputStream trong Java

Để sử dụng lớp DataOutputStream, 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.DataOutputStream;

Cú pháp khai báo lớp DataOutputStream:

Cú pháp

public class DataOutputStream
extends FilterOutputStream
implements DataOutput

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

↳ public class DataOutputStream: Đây là khai báo một lớp công khai (public) tên là DataOutputStream. 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 FilterOutputStream: Điều này có nghĩa là DataOutputStream là một lớp con của FilterOutputStream. FilterOutputStream là một lớp trừu tượng cung cấp các phương thức để ghi dữ liệu vào một OutputStream khác, tức là nó lọc hoặc xử lý dữ liệu trước khi ghi vào luồng đầu ra cơ bản. DataOutputStream thừa hưởng các chức năng cơ bản của FilterOutputStream, nhưng bổ sung thêm các phương thức để ghi các kiểu dữ liệu nguyên thủy.

↳ implements DataOutput: Điều này có nghĩa là DataOutputStream thực hiện giao diện DataOutput. DataOutput là một giao diện định nghĩa các phương thức để ghi dữ liệu nguyên thủy vào một luồng đầu ra. Ví dụ, nó có các phương thức như writeInt(int v), writeFloat(float v), writeBoolean(boolean v), v.v.

Các trường (Field) của lớp DataOutputStream

Lớp DataOutputStream có hai trường chính:

1. protected int written:

↳ Trường này được đánh dấu là protected và chỉ có thể truy cập được từ lớp DataOutputStream và các lớp con của nó.

↳ Biến written lưu trữ số byte đã được ghi vào luồng đầu ra cho đến thời điểm hiện tại.

↳ Giá trị của written được cập nhật tự động mỗi khi ghi dữ liệu vào luồng.

↳ Thông thường bạn không cần truy cập trực tiếp vào trường này, các phương thức của DataOutputStream sẽ tự động quản lý việc đếm số byte đã ghi.

2. out (thừa hưởng từ FilterOutputStream - inherited from FilterOutputStream):

↳ Trường này được kế thừa từ lớp cha FilterOutputStream.

↳ out là một đối tượng kiểu OutputStream đại diện cho luồng đầu ra cơ bản.

↳ DataOutputStream không ghi dữ liệu trực tiếp vào file hay nguồn khác, mà nó ghi dữ liệu vào luồng đầu ra được cung cấp thông qua out.

↳ Bạn không thể truy cập trực tiếp vào trường out này trong DataOutputStream. Các phương thức của DataOutputStream sẽ sử dụng out để ghi dữ liệu vào luồng đầu ra bên trong.

Constructor của lớp DataOutputStream

DataOutputStream chỉ có một constructor duy nhất là:

DataOutputStream(OutputStream out): Tạo một đối tượng DataOutputStream để ghi dữ liệu vào luồng đầu ra cơ bản (underlying output stream) được chỉ định. Luồng đầu ra này sẽ được sử dụng để lưu trữ dữ liệu được ghi bởi DataOutputStream.

Các phương thức của lớp DataOutputStream

Lớp DataOutputStream cung cấp các phương thức để ghi các kiểu dữ liệu nguyên thủy vào luồng đầu ra. Dưới đây là danh sách tất cả các phương thức của lớp DataOutputStream trong Java:

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

↳ void write(int b): Ghi một byte vào luồng đầu ra.

↳ void writeBoolean(boolean v): Ghi một giá trị boolean vào luồng đầu ra.

↳ void writeByte(int v): Ghi một byte vào luồng đầu ra.

↳ void writeBytes(String s): Ghi một chuỗi dưới dạng một dãy byte vào luồng đầu ra.

↳ void writeChar(int v): Ghi một ký tự 16 bit vào luồng đầu ra.

↳ void writeChars(String s): Ghi một chuỗi dưới dạng một dãy ký tự vào luồng đầu ra.

↳ void writeDouble(double v): Ghi một số thực 64 bit vào luồng đầu ra.

↳ void writeFloat(float v): Ghi một số thực 32 bit vào luồng đầu ra.

↳ void writeInt(int v): Ghi một số nguyên 32 bit vào luồng đầu ra.

↳ void writeLong(long v): Ghi một số nguyên 64 bit vào luồng đầu ra.

↳ void writeShort(int v): Ghi một số nguyên 16 bit vào luồng đầu ra.

↳ void writeUTF(String str): Ghi một chuỗi theo định dạng UTF-8 vào luồng đầu ra.

↳ void flush(): Xả dữ liệu đệm ra luồng đầu ra.

↳ int size(): Trả về số byte đã được ghi vào luồng đầu ra.

Ví dụ

Dưới đây là ví dụ về cách sử dụng lớp DataOutputStream trong Java để ghi các loại dữ liệu khác nhau vào một luồng đầu ra (output stream), chẳng hạn như ghi vào một file:

Ví dụ: Example.java

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Example {
    public static void main(String[] args) {
        try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.bin"))) {
            // Ghi dữ liệu cơ bản vào file
            dos.writeInt(1234);
            dos.writeDouble(98.76);
            dos.writeBoolean(true);
            dos.writeUTF("Hello, world!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Khi chương trình chạy thành công, tệp data.bin sẽ chứa nội dung như sau: sau:

��
�@X���
=q�
Hello, world!

Hy vọng ví dụ trên giúp bạn hiểu rõ hơn về cách sử dụng lớp DataOutputStream trong Java.

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.”