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