Java transient

Hiểu Về Từ Khóa Transient Trong Java

Trong Java, từ khóa transient được sử dụng để đánh dấu những trường (field) không cần thiết được lưu trữ trong quá trình Serialization. Serialization là quá trình chuyển đổi đối tượng thành một chuỗi byte, để có thể lưu trữ hoặc truyền tải. Khi một đối tượng được serialize, các trường của nó cũng được chuyển đổi thành byte, nhưng nếu một trường được đánh dấu là transient, trường đó sẽ bị bỏ qua trong quá trình này.

Định Nghĩa

Từ khóa transient trong Java được sử dụng để chỉ định rằng một trường của đối tượng sẽ không được lưu trữ khi đối tượng đó được serialized. Điều này rất hữu ích khi một trường chứa thông tin không cần thiết phải lưu trữ, ví dụ như thông tin tạm thời hoặc thông tin phụ thuộc vào ngữ cảnh.

Cú Pháp

Cú pháp để sử dụng từ khóa transient khá đơn giản. Bạn chỉ cần thêm từ khóa này trước khai báo của trường trong lớp (class) mà bạn muốn loại trừ khỏi quá trình serialization. Dưới đây là cú pháp mẫu:

class MyClass implements Serializable {
    private int id;
    private String name;
    transient private String temporaryData; // trường này sẽ bị bỏ qua trong serialization

    // Constructor, getter, setter, và các phương thức khác
}

Ví Dụ Sử Dụng

Dưới đây là một ví dụ minh họa cách sử dụng từ khóa transient trong một chương trình Java:

import java.io.*;

class User implements Serializable {
    private String username;
    private String password;  // không bảo mật
    transient private String sessionToken; // không cần lưu trữ

    public User(String username, String password, String sessionToken) {
        this.username = username;
        this.password = password;
        this.sessionToken = sessionToken;
    }

    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", sessionToken='" + sessionToken + '\'' +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        User user = new User("user1", "pass123", "tokenXYZ");

        // Serialize the user object
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("user.ser"))) {
            oos.writeObject(user);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Deserialize the user object
        User deserializedUser = null;
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.ser"))) {
            deserializedUser = (User) ois.readObject();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }

        // Display the deserialized user object
        System.out.println(deserializedUser);
    }
}

Trong ví dụ trên, khi đối tượng User được serialize, trường sessionToken sẽ không được lưu trữ do nó được đánh dấu là transient. Khi bạn deserialize đối tượng, giá trị của sessionToken sẽ là null.

Kết Luận

Từ khóa transient là một công cụ hữu ích trong Java, giúp bạn kiểm soát những trường nào trong đối tượng cần được lưu trữ trong quá trình serialization. Bằng cách đánh dấu những trường không cần thiết là transient, bạn có thể tiết kiệm bộ nhớ và chỉ lưu trữ những thông tin quan trọng.