Il existe deux manières de personnaliser la sérialisation Java : en implémentant l'interface Serialisable ou en créant votre propre sérialiseur. Lors de l'implémentation de l'interface Serialisable, remplacez les méthodes writeObject() et readObject() pour personnaliser la sérialisation et la désérialisation. Lors de la création d'un sérialiseur personnalisé, le remplacement des méthodes writeBytes() et readBytes() vous donne un contrôle total sur le processus de sérialisation et de désérialisation. Ceci est utile lors du stockage de données sensibles cryptées.
Comment personnaliser la sérialisation Java
La sérialisation Java est un mécanisme qui convertit l'état d'un objet en un flux d'octets pour le stockage ou la transmission. Par défaut, Java utilise des flux d'objets (ObjectOutputStream) et des flux d'entrée d'objets (ObjectInputStream) pour la sérialisation et la désérialisation. Cependant, nous pouvons personnaliser ce processus en implémentant l'interface Serializing
ou en créant notre propre sérialiseur. 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()
Sérialisation personnalisée
Pour personnaliser la sérialisation, nous devons implémenter l'interface Serializing
et remplacer les méthodes writeObject()
et readObject() code> . La méthode <code>writeObject()
sérialise les champs de l'objet dans un flux, tandis que la méthode readObject()
désérialise les champs du flux.
import java.io.IOException; public class CustomObjectOutputStream extends ObjectOutputStream { public CustomObjectOutputStream() throws IOException { super(); } @Override public void writeBytes(Object obj) throws IOException { // 自定义序列化算法 // ... } }Sérialiseur personnalisé Un sérialiseur personnalisé nous permet d'avoir un contrôle total sur le processus de sérialisation et de désérialisation. Nous pouvons créer nos propres sous-classes
ObjectOutputStream
et ObjectInputStream
et remplacer les méthodes writeBytes()
et readBytes()
. Exemple : 🎜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); } }🎜🎜Cas pratique 🎜🎜🎜🎜Stockage crypté des données sensibles🎜🎜🎜Nous pouvons personnaliser le sérialiseur pour crypter les données écrites dans le flux lors de la sérialisation de l'objet. Ceci est utile pour stocker des données sensibles pour une sécurité accrue. 🎜rrreee🎜Ce qui précède est un exemple de sérialiseur personnalisé pour la sérialisation d'objets Java cryptés. 🎜
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!