Cách khắc phục lỗi java.io.NotSerializableException trong java?

Khi lập trình, các bạn chắc hẳn sẽ có những lỗi. Một trong những lỗi hay gặp khi làm việc với file để ghi object đó là java.io.NotSerializableException, đừng quá lo lắng về lỗi trên bởi vì bạn sẽ được giải quyết nhanh gọn lẹ, đơn giản trong bài viết này.

Đầu tiên, chúng ta hãy thực hiện lại quá trình bị lỗi:

Thực hiện lại quá trình lỗi

Student.java

package bean;

public class Student {
	private int id;
	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Student(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public Student() {
		super();
	}

}

Ex1.java

package demo02;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

import bean.Student;

public class Ex1 {
	public static void main(String[] args) throws IOException {
		File file = new File("files\\demo.txt");
		Student student = new Student(1, "Phu IT");
		FileOutputStream fos = new FileOutputStream(file);
		ObjectOutputStream oos = new ObjectOutputStream(fos);
		oos.writeObject(student);
	}
}

Khi các bạn chạy chương trình thì kết quả output như sau:

Exception in thread "main" java.io.NotSerializableException: bean.Student
	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
	at java.io.ObjectOutputStream.writeObject(Unknown Source)
	at demo02.Ex1.main(Ex1.java:16)

 

Lỗi java.io.NotSerializableException này xảy ra bởi vì  khi các bạn ghi một object vào file thì bắt buộc phải implements Serializable. 

Vì sao phải implements Serializable khi ghi đọc một object?

Theo cơ chế của InputStream và OutputStream thì chúng ta cần viết hay đọc file thì cần truyền vào một mảng byte. Tuy nhiên khi chúng ta viết hay đọc một object thì không thỏa mãn điều kiện trên. Lúc này tron java sinh ra Serialization.

Serialization là một khái niệm giúp các bạn có thể viết một object nào đó thì lúc này nó sẽ chuyển về dưới dạng mảng byte và lưu vào trong bộ nhớ. Từ đó khi đọc file ta cũng có Deserialization giúp ta có thể chuyển đổi từ mảng byte sang object để có thể lấy được thông tin cần thiết.

Vậy, để cho một object có thể sử dụng Serialization, chỉ cần thực hiện cho object của chúng ta hiện thực một interface với tên gọi là java.io.Serializable. Interface này không có bất kỳ một phương thức nào cần override.

public class Student implements Serializable{

Từ đó, khi chạy chương trình thì không còn xuất hiện lỗi trên nữa.

Ở phần trên, các ban có thể thêm vào thêm một dòng code như sau:

public class Student implements Serializable{
	private static final long serialVersionUID = -6500665823330706018L;

serialVersionUID là gì?

serialVersionUID là để chắc chắn rằng khi ghi file và đọc file thì trước sau như một.  Nghĩa là nó sẽ dựa vào UID này để xử lý object bạn đang thực thi.

Trên là hướng dẫn giúp bạn giải quyết được vấn đề khắc phục lỗi NotSerializableException trong java cũng như hiểu serialVersionUID là gì? Serializable là gì? Deserialization là gì?

Happy code!

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận
x