Lớp ObjectInputStream và ObjectOutputStream trong Java

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 stream
  • readBoolean() đọc dữ liệu với đối tượng wrapper class Boolean
  • readChar() đọc dữ liệu với đối tượng wrapper class Character
  • readInt() đọc dữ liệu với đối tượng wrapper class Integer
  • readObject() đọc đối tượng (object) từ input stream
  • available() trả về số byte có sẵn cần đọc trong input stream
  • skipBytes() bỏ qua và giải phóng một số byte nhất định không cần đọc từ input stream
  • close() đó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 stream
  • writeBoolean() ghi dữ liệu với đối tượng wrapper class Boolean
  • writeChar() ghi dữ liệu với đối tượng wrapper class Character
  • writeInt() ghi dữ liệu với đối tượng wrapper class Integer
  • writeObject() ghi đối tượng (object) đến output stream
  • flush() xóa tất cả dữ liệu từ output stream
  • close() đó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 p1p2 của lớp Person có thể được đọc và ghi bởi ObjectInputStreamObjectOutputStream.

5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Lớp FileInputStream và FileOutputStream trong JavaLớp BufferedInputStream và BufferedOutputStream trong Java >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.