Từ Khóa transient
(Transient Keywords)

Từ khóa transient trong Java được sử dụng để chỉ định rằng một trường trong một lớp không nên được tuần tự hóa (serialization) khi đối tượng của lớp đó được ghi vào luồng tuần tự hóa. Điều này có nghĩa là khi đối tượng được tuần tự hóa, các trường transient sẽ không được lưu trữ và khi đối tượng được giải tuần tự hóa, các trường transient sẽ được khôi phục về giá trị mặc định của kiểu dữ liệu của chúng.

Tại sao sử dụng từ khóa transient trong Java?

↳ Ngăn chặn rò rỉ thông tin nhạy cảm: Các thông tin như mật khẩu, khóa mã hóa, token xác thực... thường không nên được lưu trữ dưới dạng văn bản rõ. Đánh dấu chúng là transient giúp đảm bảo chúng không bị lưu vào file hoặc database một cách vô tình, giảm thiểu rủi ro bị tấn công.

↳ Giảm kích thước dữ liệu: Bằng cách loại bỏ các trường không cần thiết khỏi quá trình tuần tự hóa, bạn có thể giảm kích thước của luồng byte, từ đó tiết kiệm không gian lưu trữ và tăng tốc độ truyền dữ liệu.

↳ Ngăn chặn các trường được tính toán: Đôi khi, giá trị của một trường có thể được tính toán dựa trên các trường khác hoặc thông tin từ môi trường. Việc đánh dấu nó là transient giúp đảm bảo rằng giá trị luôn được tính toán đúng khi cần, tránh tình trạng giá trị cũ bị lưu lại.

Khi nào nên sử dụng transient?

↳ Các trường chứa thông tin nhạy cảm: Mật khẩu, khóa mã hóa, token, thông tin cá nhân...

↳ Các trường được tính toán: Các trường có giá trị phụ thuộc vào các trường khác hoặc trạng thái của hệ thống.

↳ Các trường tạm thời: Các trường chỉ được sử dụng trong một phạm vi nhất định và không cần lưu trữ lâu dài.

Cú pháp của từ khóa transient trong Java

Cú pháp

private transient <kiểu_dữ_liệu> <tên_trường>;
hoặc
transient private  <kiểu_dữ_liệu> <tên_trường>;

Ví dụ

class SinhVien implements Serializable {
    private int maSV;
    private String ten;
    transient private String matKhau; // Biến mật khẩu sẽ không được tuần tự hóa
}

Lưu ý:

↳ Chỉ áp dụng cho trường instance: Từ khóa transient chỉ có hiệu lực với các trường thuộc về một đối tượng cụ thể (instance), không áp dụng cho các trường tĩnh (static).

↳ Giá trị mặc định: Khi một đối tượng được giải tuần tự hóa, các trường transient sẽ được khởi tạo lại với giá trị mặc định của kiểu dữ liệu đó.

Dưới đây là một ví dụ đơn giản về cách sử dụng từ khóa transient trong Java:

Ví dụ: Example.java

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class User implements Serializable {
    private static final long serialVersionUID = 1L;
    
    private String username;
    private transient String password;

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

    @Override
    public String toString() {
        return "\nUsername: " + username + ", Password: " + password;
    }
}

public class Example {
    public static void main(String[] args) {
        User user = new User("admin", "password123");

        // Tuần tự hóa đối tượng
        try (FileOutputStream fos = new FileOutputStream("user.ser");
             ObjectOutputStream oos = new ObjectOutputStream(fos)) {
            oos.writeObject(user);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Giải tuần tự hóa đối tượng
        try (FileInputStream fis = new FileInputStream("user.ser");
             ObjectInputStream ois = new ObjectInputStream(fis)) {
            User deserializedUser = (User) ois.readObject();
            System.out.println("User đã hủy tuần tự hóa: " + deserializedUser);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Kết quả của chương trình là:

User đã hủy tuần tự hóa:
Username: admin, Password: null

Điều này cho thấy rằng giá trị của password đã không được tuần tự hóa và khôi phục, do đó giá trị của nó là null sau khi đối tượng được giải tuần tự hóa.

Câu Nói Truyền Cảm Hứng

“Bắt đầu ở đâu không quan trọng, quan trọng là bạn sẵn sàng bắt đầu.” – W. Clement Stone

Không Gian Tích Cực

“Chúc bạn luôn giữ vững niềm tin và sức mạnh để vượt qua mọi thử thách trong cuộc sống.”