Rumah  >  Artikel  >  Java  >  Bagaimana untuk menyesuaikan siri Java?

Bagaimana untuk menyesuaikan siri Java?

WBOY
WBOYasal
2024-04-15 17:39:011141semak imbas

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.

Bagaimana untuk menyesuaikan siri Java?

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(); // 手动反序列化瞬时字段
    }
}

自定义序列化程序

自定义序列化程序允许我们完全控制序列化和反序列化过程。我们可以创建自己的ObjectOutputStreamObjectInputStream子类并重写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.

Contoh:

import java.io.IOException;

public class CustomObjectOutputStream extends ObjectOutputStream {

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

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

Penyeri tersuai membolehkan kami mempunyai kawalan penuh ke atas proses bersiri dan penyahserilan. Kami boleh mencipta subkelas 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);
    }
}
🎜🎜Kes praktikal 🎜🎜🎜🎜Storan data sensitif yang disulitkan🎜🎜🎜Kami boleh menyesuaikan penyeri untuk menyulitkan data yang ditulis dalam strim semasa penyirian objek. Ini berguna untuk menyimpan data sensitif untuk meningkatkan keselamatan. 🎜rrreee🎜Di atas ialah contoh penyeri tersuai untuk siri objek Java yang disulitkan. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menyesuaikan siri Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn