1. Lớp ObjectInputStream trong Java
Lớp ObjectInputStream nằm trong package java.io
được sử dụng để đọc đối tượng (object) được ghi bởi ObjectOutputStream. Lớp ObjectInputStream kế thừa từ lớp abstract InputStream.
Tạo ra một ObjectInputStream
Để tạo ra một object input stream, chúng ta cần import java.io.ObjectInputStream
.
//tạo ra một file input stream
FileInputStream fileStream = new FileInputStream(String file);
//tạo ra một object input stream sử dụng file input stream
ObjectInputStream objStream = new ObjectInputStream(fileStream);
Trong ví dụ trên, chúng ta đã tạo ra một object input stream có tên là objStream. Đối tượng này liên kết với file input stream có tên là fileStream. Với objStream, chúng ta có thể đọc các đối tượng (object) từ file.
Các phương thức của ObjectInputStream
read()
đọc một byte dữ liệu từ input streamreadBoolean()
đọc dữ liệu với đối tượng wrapper class BooleanreadChar()
đọc dữ liệu với đối tượng wrapper class CharacterreadInt()
đọc dữ liệu với đối tượng wrapper class IntegerreadObject()
đọc đối tượng (object) từ input streamavailable()
trả về số byte có sẵn cần đọc trong input streamskipBytes()
bỏ qua và giải phóng một số byte nhất định không cần đọc từ input streamclose()
đóng kết nối object input stream
Ví dụ ObjectInputStream đọc dữ liệu từ file được ghi bởi ObjectOutputStream
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
class Main {
public static void main(String[] args) {
Integer data1 = 9;
String data2 = "Gochocit";
try {
FileOutputStream file = new FileOutputStream("D:\\input.txt");
ObjectOutputStream output = new ObjectOutputStream(file);
//Ghi dữ liệu vào file sử dụng ObjectOutputStream
output.writeInt(data1);
output.writeObject(data2);
FileInputStream fileStream = new FileInputStream("D:\\input.txt");
//Tạo một đối tượng object input stream
ObjectInputStream objStream = new ObjectInputStream(fileStream);
//Sử dụng hàm readInt()
System.out.println("Integer data :" + objStream.readInt());
//Sử dụng hàm readObject()
System.out.println("String data: " + objStream.readObject());
output.close();
objStream.close();
}
catch (Exception e) {
System.err.println(e.getStackTrace());
}
}
}
Kết quả
Integer data :9
String data: Gochocit
Khi sử dụng ObjectOutputStream để ghi dữ liệu là các object vào file thì dữ liệu trong file đã được mã hóa ở hệ cơ số 16. Bên dưới là dữ liệu trong file D:\\input.txt
được ghi bởi ObjectOutputStream. Dữ liệu trong file này thì ObjectInputStream mới đọc được.
aced 0005 7704 0000 0009 7400 0847 6f63
686f 6369 74
Ví dụ ObjectInputStream đọc object được ghi bởi ObjectOutputStream
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) {
//Tạo đối tượng của lớp Dog
Dog dog = new Dog("Tyson", "Labrador");
try {
FileOutputStream file = new FileOutputStream("D:\\input.txt");
//Tạo ObjectOutputStream
ObjectOutputStream output = new ObjectOutputStream(file);
//Ghi đối tượng Dog đến output stream
output.writeObject(dog);
FileInputStream fileStream = new FileInputStream("D:\\input.txt");
//Tạo ObjectInputStream
ObjectInputStream input = new ObjectInputStream(fileStream);
//Đọc đối tượng Dog
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();
}
}
}
Kết quả
Dog Name: Tyson
Dog Breed: Labrador
Đối tượng dog của lớp Dog được ghi vào file D:\\input.txt
. Các đối tượng được ghi bởi ObjectOutputStream thì cần kế thừa interface Serializable. Bởi vì ObjectOutputStream chỉ có thể ghi các serializable object đến output stream.
2. Lớp ObjectOutputStream trong Java
Lớp ObjectOutputStream nằm trong package java.io
có thể được sử dụng để ghi các đối tượng (object) đến output stream. Các đối tượng này có thể đọc bởi ObjectInputStream.
Lớp ObjectOutputStream kế thừa từ lớp abstract OutputStream. Lưu ý: Lớp ObjectOutputStream chỉ có thể ghi những object kế thừa interface Serializable.
Tạo một ObjectOutputStream
Để tạo một object output stream, chúng ta cần import java.io.ObjectOutputStream
.
//Tạo một FileOutputStream nới mà các object từ ObjectOutputStream được ghi
FileOutputStream fileStream = new FileOutputStream(String file);
//Tạo ra ObjectOutputStream
ObjectOutputStream objStream = new ObjectOutputStream(fileStream);
Trong ví dụ trên, chúng ta tạo ra một đối tượng tên là objStream của lớp ObjectOutputStream. Đối tượng này giúp ghi dữ liệu vào đối tượng fileStream của lớp FileOutputStream.
Các phương thức của ObjectOutputStream
write()
ghi một byte dữ liệu đến output streamwriteBoolean()
ghi dữ liệu với đối tượng wrapper class BooleanwriteChar()
ghi dữ liệu với đối tượng wrapper class CharacterwriteInt()
ghi dữ liệu với đối tượng wrapper class IntegerwriteObject()
ghi đối tượng (object) đến output streamflush()
xóa tất cả dữ liệu từ output streamclose()
đóng kết nối output stream
Một ví dụ sử dụng ObjectOutputStream
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Person implements Serializable {
private String name;
private int age;
private String gender;
Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
@Override
public String toString() {
return "Name:" + name + "\nAge: " + age + "\nGender: " + gender;
}
}
class Main {
public static void main(String[] args) {
//Tạo đối tượng của lớp Person
Person p1 = new Person("John", 30, "Male");
Person p2 = new Person("Rachel", 25, "Female");
try {
FileOutputStream file = new FileOutputStream("D:\\output.txt");
//Tạo ObjectOutputStream
ObjectOutputStream output = new ObjectOutputStream(file);
//Ghi đối tượng Person đến output stream
output.writeObject(p1);
output.writeObject(p2);
FileInputStream fileStream = new FileInputStream("D:\\output.txt");
//Tạo ObjectInputStream
ObjectInputStream input = new ObjectInputStream(fileStream);
//Đọc đối tượng Person
Person pr1 = (Person)input.readObject();
Person pr2 = (Person)input.readObject();
System.out.println(pr1.toString());
System.out.println(pr2.toString());
output.close();
input.close();
}
catch (Exception e) {
e.getStackTrace();
}
}
}
Kết quả
Name:John
Age: 30
Gender: Male
Name:Rachel
Age: 25
Gender: Female
Trong ví dụ trên, chúng ta có lớp Person kế thừa interface Serializable. Các đối tượng p1 và p2 của lớp Person có thể được đọc và ghi bởi ObjectInputStream và ObjectOutputStream.