Trong hướng dẫn này, chúng ta sẽ tìm hiểu về Java ObjectOutputStream và các phương thức của nó với sự trợ giúp của các ví dụ.
Các ObjectOutputStream
lớp của java.io
gói có thể được sử dụng để viết các đối tượng có thể được đọc bởi ObjectInputStream
.
Nó mở rộng OutputStream
lớp trừu tượng.
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à do đó tạo ra các luồng tương ứng. Quá trình này được gọi là tuần tự hóa.
Các luồng 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.
Lưu ý : ObjectOutputStream
Lớp chỉ ghi những đối tượng thực thi Serializable
giao diện. Điều này là do các đối tượng cần được tuần tự hóa trong khi ghi vào luồng
Tạo một ObjectOutputStream
Để tạo luồng đầu ra đối tượng, java.io.ObjectOutputStream
trước tiên chúng ta phải nhập gói. Sau khi chúng tôi nhập gói, đây là cách chúng tôi có thể tạo luồng đầu ra.
// Creates a FileOutputStream where objects from ObjectOutputStream are written
FileOutputStream fileStream = new FileOutputStream(String file);
// Creates the ObjectOutputStream
ObjectOutputStream objStream = new ObjectOutputStream(fileStream);
Trong ví dụ trên, chúng ta đã tạo một luồng xuất đối tượng có tên là objStream được liên kết với luồng xuất tệp có tên là fileStream .
Các phương thức của ObjectOutputStream
Các ObjectOutputStream
lớp học cung cấp triển khai cho các phương pháp khác nhau trình bày trong OutputStream
lớp.
viết phương pháp
write()
– writes a byte of data to the output streamwriteBoolean()
– writes data in boolean formwriteChar()
– writes data in character formwriteInt()
– writes data in integer formwriteObject()
– writes object to the output stream
Ví dụ 1: Java ObjectOutputStream
Hãy xem cách chúng ta có thể sử dụng ObjectOutputStream
để lưu trữ các đối tượng trong tệp và ObjectInputStream
đọc các đối tượng đó từ tệp
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 data1 = 5;
String data2 = "This is programiz";
try {
FileOutputStream file = new FileOutputStream("file.txt");
// Creates an ObjectOutputStream
ObjectOutputStream output = new ObjectOutputStream(file);
// writes objects to output stream
output.writeInt(data1);
output.writeObject(data2);
// Reads data using the ObjectInputStream
FileInputStream fileStream = new FileInputStream("file.txt");
ObjectInputStream objStream = new ObjectInputStream(fileStream);
System.out.println("Integer data :" + objStream.readInt());
System.out.println("String data: " + objStream.readObject());
output.close();
objStream.close();
}
catch (Exception e) {
e.getStackTrace();
}
}
}
Đầu ra
Integer data: 5 String data: This is programiz
Trong ví dụ trên, chúng ta đã sử dụng readInt()
phương thức và readObject()
phương thức để đọc một dữ liệu số nguyên và dữ liệu đối tượng từ các tệp.
Ở đây, chúng tôi đã sử dụng ObjectOutputStream
để ghi dữ liệu vào tệp. Sau đó, chúng tôi đọc dữ liệu từ tệp bằng cách sử dụng ObjectInputStream
.
Ví dụ 2: Java ObjectOutputStream
Hãy lấy một ví dụ khác,
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Dog implements Serializable {
String name;
String breed;
public Dog(String name, String breed) {
this.name = name;
this.breed = breed;
}
}
class Main {
public static void main(String[] args) {
// Creates an object of Dog class
Dog dog1 = new Dog("Tyson", "Labrador");
try {
FileOutputStream fileOut = new FileOutputStream("file.txt");
// Creates an ObjectOutputStream
ObjectOutputStream objOut = new ObjectOutputStream(fileOut);
// Writes objects to the output stream
objOut.writeObject(dog1);
// Reads the object
FileInputStream fileIn = new FileInputStream("file.txt");
ObjectInputStream objIn = new ObjectInputStream(fileIn);
// Reads the objects
Dog newDog = (Dog) objIn.readObject();
System.out.println("Dog Name: " + newDog.name);
System.out.println("Dog Breed: " + newDog.breed);
objOut.close();
objIn.close();
}
catch (Exception e) {
e.getStackTrace();
}
}
}
Đầu ra
Dog Name: Tyson Dog Breed: Labrador
Trong ví dụ trên, chúng tôi đã tạo
ObjectOutputStream
named objOut using theFileOutputStream
named fileOutObjectInputStream
named objIn using theFileInputStream
named fileIn.- An object dog1 of the Dog class.
Ở đây, chúng ta đã sử dụng luồng xuất đố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.
Lưu ý : Lớp Dog thực hiện Serializable
giao diện. Đó là bởi vì các ObjectOutputStream
đối tượng ghi duy nhất có thể được tuần tự hóa đến luồng đầu ra.
Các phương thức khác của ObjectOutputStream
Methods | Decfscriptions |
---|---|
flush() | clears all the data from the output stream |
drain() | puts all the buffered data in the output stream |
close() | closes the output stream |
Để tìm hiểu thêm, hãy truy cập Java ObjectOutputStream (tài liệu Java chính thức) .