Nói về Serialization trong Java
Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh
Serialization là một khái niệm giúp chúng ta có thể chuyển đổi trạng thái của một Java object thành một định dạng nào đó để Java object này có thể được lưu trữ ở đâu đó và sau đó, nó sẽ được sử dụng bởi một tiến trình khác.
Thông thường, khi sử dụng Serialization, Java object của chúng ta sẽ được chuyển đổi qua byte streams và chúng ta có thể lưu byte stream này trong bộ nhớ, trên ổ đĩa, truyền qua mạng đến một server nào đó hoặc cũng có thể lưu chúng vào database.
Tìm việc làm Java cho sinh viên mới ra trường
Và khi một tiến trình khác sử dụng một Java object đã được Serialization, nó sẽ chuyển đổi định dạng đã Serialization về trạng thái của Java object ban đầu. Nhờ vậy, tiến trình đó có thể sử dụng lại Java object của chúng ta.
Để cho một object có thể sử dụng Serialization được, chúng ta phải 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 hiện thực cả các bạn ạ!
Để các bạn có thể hiểu rõ hơn, mình sẽ làm một ví dụ để minh chứng những điều mình vừa nói nhé!
Ví dụ ở đây, mình có một đối tượng là Student:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package com.huongdanjava.javaexample;
public class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
|
Vì mình muốn sử dụng Serialization nên mình sẽ hiện thực interface Serializable cho đối tượng Student như sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package com.huongdanjava.javaexample;
import java.io.Serializable;
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
|
Như các bạn thấy, mình đã thêm một biến tên là serialVersionUID trong object Student của mình. Mục đích của biến này là để chắc chắn trước và sau khi chuyển đổi, lớp Student của chúng ta là một đấy các bạn.
OK, bây giờ chúng ta sẽ viết code để chuyển đổi đối tượng Student và lưu byte streams của nó vào một tập tin nào đó xem thử nhé!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package com.huongdanjava.javaexample;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class SerializationExample {
public static void main(String[] args) {
// Create Student object
Student student = new Student();
student.setName(“Khanh”);
student.setAge(30);
// Use FileOutputStream to save the Student object into a file
try ( FileOutputStream fos = new FileOutputStream(“E:\\student.txt”);
ObjectOutputStream oos = new ObjectOutputStream(fos); ) {
oos.writeObject(student);
} catch (IOException i) {
i.printStackTrace();
}
}
}
|
Bây giờ, một tập tin đã được tạo và nếu bạn kiểm tra tập tin mà bạn đã lưu đối tượng Student của chúng ta, bạn sẽ thấy nội dung giống giống như sau:
1
|
’ sr &com.huongdanjava.javaexample.Student I ageL namet Ljava/lang/String;xp t Khanh
|
Vậy làm thế nào để tiến trình khác có thể sử dụng tập tin mình đã tạo trong ví dụ trên để sử dụng, chúng ta viết code tiếp nhé!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package com.huongdanjava.javaexample;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class DeserializationExample {
public static void main(String[] args) {
Student student = null;
try ( FileInputStream fos = new FileInputStream(“E:\\student.txt”);
ObjectInputStream oos = new ObjectInputStream(fos); ) {
student = (Student) oos.readObject();
} catch (IOException i) {
i.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.err.println(student.getName());
System.err.println(student.getAge());
}
}
|
Kết quả:
1
2
|
Khanh
30
|
Như bạn thấy trước và sau khi chuyển đổi, đối tượng Student của mình vẫn có những thông tin mà chúng ta đã lưu trước đó.
Bài viết gốc được đăng tải tại huongdanjava.com
Có thể bạn quan tâm:
- Dấu (…) trong JavaScript có ý nghĩa gì?
- Hướng dẫn xây dựng tính năng scroll trong trang bằng Javascript ES6
Xem thêm các tuyển dụng IT lương cao hấp dẫn tại TopDev
- C Cách tích hợp ChatGPT vào Google Search siêu dễ
- V VoiceGPT là gì? Giới thiệu tính năng và cách cài đặt sử dụng Voice GPT
- G GPT-4o Mini – Thông minh hơn và tiết kiệm hơn?
- C ChatGPT-4o là gì? Điểm mới của ChatGPT-4o vs ChatGPT-4
- C Chat GPT 4.0 là gì? Có gì vượt trội so với Chat GPT phiên bản cũ?
- C Cách tự học code web, tìm kiếm công việc dễ dàng và hạnh phúc mỗi ngày
- G Giới thiệu 15 website học và luyện hack hợp pháp
- T Tầm quan trọng của các chương trình đào tạo sau đại học trong kỷ nguyên 4.0
- i iOS 17.5 Beta 1 vừa được phát hành, những thay đổi nào đáng chú ý?
- i iOS 18 khi nào ra mắt? iOS 18 sẽ không hỗ trợ máy nào?