Terdapat dua cara untuk menyesuaikan penyirian Java: dengan melaksanakan antara muka Serializable atau mencipta penyiri anda sendiri. Apabila melaksanakan antara muka Serializable, ganti kaedah writeObject() dan readObject() untuk menyesuaikan serialisasi dan penyahserikatan. Apabila membuat penyeri bersiri tersuai, mengatasi kaedah writeBytes() dan readBytes() memberi anda kawalan sepenuhnya ke atas proses bersiri dan penyahsirilan. Ini berguna apabila menyimpan data sensitif yang disulitkan.
Cara Menyesuaikan Pensiri Java
Pensiri Java ialah mekanisme yang menukar keadaan objek kepada aliran bait untuk penyimpanan atau penghantaran. Secara lalai, Java menggunakan strim objek (ObjectOutputStream) dan strim input objek (ObjectInputStream) untuk bersiri dan penyahserilan. Walau bagaimanapun, kami boleh menyesuaikan proses ini dengan melaksanakan antara muka Serializable
atau mencipta serializer kami sendiri. 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()
Siri tersuai
Untuk menyesuaikan siri, kita perlu melaksanakan antara muka Serializable
dan mengatasi writeObject()
dan readObject()</ code> kaedah . Kaedah <code>writeObject()
mensirikan medan objek ke dalam strim, manakala kaedah readObject()
menyahsiri medan daripada strim.
import java.io.IOException; public class CustomObjectOutputStream extends ObjectOutputStream { public CustomObjectOutputStream() throws IOException { super(); } @Override public void writeBytes(Object obj) throws IOException { // 自定义序列化算法 // ... } }
ObjectOutputStream
dan ObjectInputStream
kami sendiri dan mengatasi kaedah writeBytes()
dan readBytes()
. Contoh: 🎜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); } }
Atas ialah kandungan terperinci Bagaimana untuk menyesuaikan siri Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!