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 ObjectInputStream
lớp của java.io
gói có thể được sử dụng để đọc các đối tượng mà trước đây được viết bởi ObjectOutputStream
.
Nó mở rộng InputStream
lớp trừu tượng.
Trước khi bạn tìm hiểu về ObjectInputStream
lớp, hãy đảm bảo rằng bạn biết về Lớp ObjectOutputStream.
Hoạt động của ObjectInputStream
Chủ ObjectInputStream
yếu được sử dụng để đọc dữ liệu được viết bởi ObjectOutputStream
.
Về cơ bản, các ObjectOutputStream
chuyển đổi các đối tượng Java thành các luồng tương ứng. Đâ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 hoặc chuyển qua mạng.
Bây giờ, nếu chúng ta cần đọc các đối tượng đó, chúng ta sẽ sử dụng ObjectInputStream
nó sẽ chuyển đổi các luồng trở lại các đối tượng tương ứng. Điều này được gọi là deserialization.
Tạo một ObjectInputStream
Để tạo luồng nhập đối tượng, java.io.ObjectInputStream
trước tiên chúng ta phải nhập gói. Khi chúng tôi nhập gói, đây là cách chúng tôi có thể tạo luồng đầu vào.
// Creates a file input stream linked with the specified file FileInputStream fileStream = new FileInputStream(String file); // Creates an object input stream using the file input stream ObjectInputStream objStream = new ObjectInputStream(fileStream);
Trong ví dụ trên, chúng ta đã tạo một luồng nhập đối tượng có tên là objStream được liên kết với luồng nhập tệp có tên là fileStream.
Bây giờ, objStream
có thể được sử dụng để đọc các đối tượng từ tệp.
Các phương thức của ObjectInputStream
Các ObjectInputStream
lớp học cung cấp triển khai các phương pháp khác nhau trình bày trong InputStream
lớp.
phương thức read ()
read()
- đọc một byte dữ liệu từ luồng đầu vàoreadBoolean()
- đọc dữ liệu ở dạng booleanreadChar()
- đọc dữ liệu ở dạng ký tựreadInt()
- đọc dữ liệu ở dạng số nguyênreadObject()
- đọc đối tượng từ luồng đầu vào
Ví dụ 1: Java ObjectInputStream
Hãy xem cách chúng ta có thể sử dụng ObjectInputStream
lớp để đọc các đối tượng được viết bởi ObjectOutputStream
lớ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"); ObjectOutputStream output = new ObjectOutputStream(file); // Writing to the file using ObjectOutputStream output.writeInt(data1); output.writeObject(data2); FileInputStream fileStream = new FileInputStream("file.txt"); // Creating an object input stream ObjectInputStream objStream = new ObjectInputStream(fileStream); //Using the readInt() method System.out.println("Integer data :" + objStream.readInt()); // Using the readObject() method System.out.println("String data: " + objStream.readObject()); output.close(); objStream.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Đầu ra
Dữ liệu số nguyên: 5 Dữ liệu chuỗi: Đây là chương trình
Trong ví dụ trên, chúng ta đã sử dụng phương thức readInt()
và readObject()
để đọc dữ liệu số nguyên và dữ liệu đối tượng từ 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 ObjectInputStream
Hãy xem một ví dụ thực tế 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 dog = new Dog("Tyson", "Labrador"); try ( FileOutputStream file = new FileOutputStream("file.txt"); // Creates an ObjectOutputStream ObjectOutputStream output = new ObjectOutputStream(file); // Writes objects to the output stream output.writeObject(dog); FileInputStream fileStream = new FileInputStream("file.txt"); // Creates an ObjectInputStream ObjectInputStream input = new ObjectInputStream(fileStream); // Reads the objects Dog newDog = (Dog) input.readObject(); System.out.println("Dog Name: " + newDog.name); System.out.println("Dog Breed: " + newDog.breed); output.close(); input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Đầu ra
Tên chó: Tyson Chó giống: Labrador
Trong ví dụ trên, chúng tôi đã tạo
ObjectOutputStream
đầu ra được đặt tên bằng cách sử dụngFileOutputStream
tệp được đặt tênObjectInputStream
đầu vào được đặt tên bằng cách sử dụngFileInputStream
tệp đã đặt tên- Một con chó đối tượng của lớp Dog
Ở đâ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à vì ObjectOutputStream
chỉ ghi các đối tượng có thể tuần tự hóa vào luồng đầu ra.
Các phương pháp khác của ObjectInputStream
Phương pháp | Mô tả |
---|---|
available() | trả về số byte có sẵn trong luồng đầu vào |
mark() | đánh dấu vị trí trong luồng đầu vào mà dữ liệu đã được đọc |
reset() | trả lại điều khiển đến điểm trong luồng đầu vào nơi đánh dấu được đặt |
skipBytes() | bỏ qua và loại bỏ các byte được chỉ định khỏi luồng đầu vào |
close() | đóng luồng đầu vào đối tượng |
Để tìm hiểu thêm, hãy truy cập Java ObjectInputStream (tài liệu Java chính thức).