Trong bài viết này, chúng ta sẽ tìm hiểu về lớp ObjectOutputStream trong Java và các phương thức của nó cùng với các ví dụ.
Lớp ObjectOutputStream
Lớp ObjectOutputStream của gói java.io có thể được sử dụng để ghi các đối tượng có thể được đọc bởi ObjectInputStream. Nó kế thừa lớp trừu tượng OutputStream.
Cách hoạt động của ObjectOutputStream
Về cơ bản, ObjectOutputStream mã hóa các đối tượng Java bằng cách sử dụng tên lớp và các giá trị đối tượng. Và tạo ra các luồng tương ứng. Quá trình này được gọi là quá trình chuyển đổi Serialization. Các luồng được chuyển đổi đó có thể được lưu trữ trong các tệp và có thể được chuyển giữa các mạng.
Chú ý: Lớp ObjectOutputStream chỉ ghi những đối tượng triển khai Serializable Interface. Điều này là do các đối tượng cần được chuyển đổi trong khi ghi vào luồng.
Tạo một ObjectOutputStream
Để tạo ObjectOutputStream, trước tiên chúng ta phải thêm gói package java.io.ObjectOutputStream. Sau khi thêm, sau đây là cách chúng ta có thể tạo cho luồng đầu ra.
1 2 |
FileOutputStream file = new FileOutputStream(String path); ObjectOutputStream obj = new ObjectOutputStream(file); |
Trong ví dụ trên, chúng ta đã tạo một PrintStream đầu ra đối tượng có tên là obj được liên kết với luồng đầu ra cho tệp có tên là file.
Các phương thức của ObjectOutputStream
Lớp ObjectOutputStream cung cấp các triển khai cho các phương thức khác nhau có trong lớp OutputStream.
Phương thức write()
- Phương thức write(): Ghi một byte dữ liệu vào luồng đầu ra.
- Phương thức writeBoolean(): Ghi dữ liệu ở dạng boolean.
- Phương thức writeChar(): Ghi dữ liệu ở dạng ký tự.
- Phương thức writeInt(): Ghi dữ liệu ở dạng số nguyên.
- Phương thức writeObject(): Ghi đối tượng vào luồng đầu ra.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; class Main { public static void main(String[] args) { int du_lieu1 = 15; String du_lieu2 = "Lap trinh Java"; try { FileOutputStream file = new FileOutputStream("tek4.txt"); ObjectOutputStream obj = new ObjectOutputStream(file); obj.writeInt(du_lieu1); obj.writeObject(du_lieu2); FileInputStream file2 = new FileInputStream("tek4.txt"); ObjectInputStream obj2 = new ObjectInputStream(file2); System.out.println(obj2.readInt()); System.out.println(obj2.readObject()); obj.close(); obj2.close(); } catch (Exception e) { e.getStackTrace(); } } } |
Kết quả:
1 2 |
15 Lap trinh Java |
Trong ví dụ trên, chúng ta đã sử dụng phương thức readInt() và phương thức readObject() để đọc dữ liệu số nguyên và dữ liệu đối tượng từ các tệp. Ở đây, chúng ta đã sử dụng ObjectOutputStream để ghi dữ liệu vào tệp. Sau đó, chúng ta đọc dữ liệu từ tệp bằng ObjectInputStream.
Ví dụ 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class sinh_vien implements Serializable { String ten; public sinh_vien(String a) { this.ten = a; } } class Main { public static void main(String[] args) { sinh_vien sv = new sinh_vien("Nguyen A"); try { FileOutputStream file = new FileOutputStream("tek4.txt"); ObjectOutputStream output = new ObjectOutputStream(file); output.writeObject(sv); FileInputStream file2 = new FileInputStream("tek4.txt"); ObjectInputStream input = new ObjectInputStream(file2); sinh_vien sv2 = (sinh_vien) input.readObject(); System.out.println("Ten sinh vien la: " + sv2.ten); output.close(); input.close(); } catch (Exception e) { e.getStackTrace(); } } } |
Kết quả:
1 |
Ten sinh vien la: Nguyen A |
Ở đây, chúng ta đã sử dụng PrintStream đầu ra cho đối tượng để ghi đối tượng vào tệp. Và, luồng đầu vào đối tượng để đọc đối tượng từ tệp.
Chú ý: Lớp sinh_vien triển khai cho Serializable Interface. Đó là bởi vì ObjectOutputStream chỉ ghi các đối tượng có thể được chuyển đổi Serialization vào PrintStream đầu ra.
Các phương thức khác
Phương thức | Mô tả |
flush() | Xóa bỏ tất cả dữ liệu từ PrintStream đầu ra. |
drain() | Đẩy tất cả dữ liệu lưu trữ tạm thời vào trong luồng đầu ra. |
close() | Đóng PrintStream đầu ra. |
Trên đây là khái niệm và ví dụ cơ bản về lớp ObjectOutputStream trong Java. Hy vọng mọi người có thể áp dụng vào trong chương trình của mình. Mọi người hãy tiếp tục theo dõi các bài tiếp theo và cập nhật các bài mới nhất trên tek4 nhé!
P/s: Cảm ơn mọi người!