ホームページ  >  記事  >  Java  >  Java シリアル化をカスタマイズするにはどうすればよいですか?

Java シリアル化をカスタマイズするにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-04-15 17:39:011141ブラウズ

Java シリアル化をカスタマイズするには、Serializable インターフェイスを実装する方法と独自のシリアライザーを作成する方法の 2 つがあります。 Serializable インターフェイスを実装する場合、writeObject() メソッドと readObject() メソッドをオーバーライドして、シリアル化と逆シリアル化をカスタマイズします。カスタム シリアライザーを作成する場合、writeBytes() メソッドと readBytes() メソッドをオーバーライドすると、シリアル化と逆シリアル化のプロセスを完全に制御できるようになります。これは、機密データを暗号化して保存する場合に役立ちます。

Java シリアル化をカスタマイズするにはどうすればよいですか?

Java シリアル化をカスタマイズする方法

Java シリアル化は、オブジェクトの状態をストレージ用のバイト ストリームに変換する方法です。または伝達機構。デフォルトでは、Java はシリアル化と逆シリアル化に ObjectOutputStream と ObjectInputStream を使用します。ただし、Serializable インターフェイスを実装するか、独自のシリアライザーを作成することで、このプロセスをカスタマイズできます。

カスタム シリアル化

シリアル化をカスタマイズするには、Serializable インターフェイスを実装し、writeObject() と # をオーバーライドする必要があります。 ##readObject() メソッド。 writeObject() メソッドはオブジェクトのフィールドをストリームにシリアル化し、readObject() メソッドはストリームからフィールドを逆シリアル化します。

例:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class CustomSerializedClass implements Serializable {

    private String name;
    private transient int age; // 注解`transient`表示在序列化时忽略该字段

    @Override
    public void writeObject(ObjectOutputStream out) throws IOException {
        out.defaultWriteObject(); // 序列化非瞬时字段
        out.writeInt(age); // 手动序列化瞬时字段
    }

    @Override
    public void readObject(ObjectInputStream in) throws IOException {
        in.defaultReadObject(); // 反序列化非瞬时字段
        age = in.readInt(); // 手动反序列化瞬时字段
    }
}

カスタム シリアライザー

カスタム シリアライザーを使用すると、シリアル化および逆シリアル化のプロセスを完全に制御できます。独自の

ObjectOutputStream および ObjectInputStream サブクラスを作成し、writeBytes() および readBytes() メソッドをオーバーライドできます。

例:

import java.io.IOException;

public class CustomObjectOutputStream extends ObjectOutputStream {

    public CustomObjectOutputStream() throws IOException {
        super();
    }

    @Override
    public void writeBytes(Object obj) throws IOException {
        // 自定义序列化算法
        // ...
    }
}

実践的なケース

機密データの暗号化ストレージ

シリアル化中にオブジェクトがストリームに書き込むデータを暗号化するシーケンス オプティマイザー。これは、セキュリティを強化するために機密データを保存する場合に役立ちます。

public class EncryptedObjectOutputStream extends ObjectOutputStream {

    private Cipher cipher;

    public EncryptedObjectOutputStream(OutputStream out) throws IOException {
        super(out);
        cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    }

    @Override
    public void writeBytes(Object obj) throws IOException {
        byte[] bytes = // 序列化对象
        cipher.doFinal(bytes);
        out.write(bytes);
    }
}

上記は、暗号化された Java オブジェクトのシリアル化のためのカスタム シリアライザーの例です。

以上がJava シリアル化をカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。