Rumah > Java > javaTutorial > teks badan

Bagaimana untuk menggunakan pensirilan dan penyahserikatan Java

PHPz
Lepaskan: 2023-04-29 17:37:14
ke hadapan
1357 orang telah melayarinya

    Pensirilan dan penyahserikatan Java

    Pensirilan Java mengubah objek Java Object menjadi jujukan bait binari byte[]

    Penyahsiran Java ialah untuk menukar jujukan bait perduaan byte[] menjadi objek Java Java Object

    API Sirial

    ObjectOutputStream

    strim output bait Objek, menulis strim output objek ke fail (digunakan bersama dengan FileOutputStream)

    Instance:

    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("1.txt"));
    或
    FileOutputStream fout = new FileOutputStream("1.txt");
    ObjectOutputStream out = new ObjectOutputStream(fout);
    Salin selepas log masuk

    Selain itu, ObjectOutputStream juga menyediakan kaedah writeObject() untuk mensiri objek dan menghantarnya ke aliran output.

    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("1.txt"));
    out.writeObject(new Test("Sentiment",10));        //对Test类中的构造方法进行传参
    Salin selepas log masuk

    ObjectInputStream

    Objek aliran input Byte, menyahsiri urutan bait binari dalam fail (digabungkan dengan FileInputStream)

    Instance:

    rreee< ,🎜> ObjectInputStream juga menyediakan kaedah

    untuk mengeluarkan objek seterusnya daripada strim dan menyahsiri objek tersebut. Nilai pulangannya ialah Objek, oleh itu, ia perlu ditukar kepada jenis data yang sesuai. readObject()

    ObjectInputStream in = new ObjectInputStream(new FileInputStream("1.txt"));
    或
    FileInputStream fin = new FileInputStream("1.txt");
    ObjectInputStream oin = new ObjectInputStream(fin);
    Salin selepas log masuk

    Contoh pemahaman

    Test.java (Jika kelas ingin melaksanakan operasi bersiri, ia mesti melaksanakan pewarisan antara muka Serializable)

    ObjectInputStream In = new ObjectInputStream(new FileInputStream("1.txt"));
    Test o = (Test)In.readObject();
    System.out.println(o);        //读取后输出实例理解
    Salin selepas log masuk

    Serializable.java

    rreee

    UnSerializable.java

    package Sentiment.unserialize.demo01;
    
    import java.io.Serializable;
    
    public class Test implements Serializable {
        private String name;
        private int age;
    
        public Test() {
        }
    
        public Test(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Test{" + "name=&#39;" + name + &#39;\&#39;&#39; + ", age=" + age + &#39;}&#39;;
        }
    
    }
    Salin selepas log masuk

    Selepas menjalankan Serializable.java, anda akan mendapat kandungan fail bytecode binari

    Bagaimana untuk menggunakan pensirilan dan penyahserikatan Java

    Pada masa ini, anda akan mendapat binari perkataan selepas menjalankan UnSerializable.java Kandungan selepas penyahserikatan kod bahagian

    Bagaimana untuk menggunakan pensirilan dan penyahserikatan Java

    serialVersionUID

    • Setiap kelas boleh bersiri akan dikaitkan dengan satu semasa Versi bersiri nombor, nombor versi ini ialah atribut serialVersionUID

    • Atribut serialVersionUID mesti diubah suai dengan pengubahsuai panjang akhir statik.

    • Jika kelas boleh bersiri tidak mengisytiharkan atribut serialVersionUID, Java akan mengira nilai serialVersionUID lalai berdasarkan pelbagai maklumat kelas semasa bersiri Walau bagaimanapun, dokumentasi rasmi Oracle amat mengesyorkan bahawa semua boleh bersiri kelas Kelas bersiri semuanya memaparkan nilai serialVersionUID

    pemahaman contoh

    ditakrifkan dalam Test.java

    yang nilainya ialah 1serialVersionUID

    package Sentiment.unserialize.demo01;
    
    import java.io.*;
    
    public class Serializable {
        public static void main(String[] args) throws IOException {
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("1.txt"));
            out.writeObject(new Test("Sentiment",10));
            out.close();
        }
    }
    Salin selepas log masuk

    Pada. kali ini, jalankan Serializable.java untuk melaksanakan operasi bersiri

    Selepas operasi selesai, takrifkan nilai

    sebagai 2—>public static final long serialVersionUID = 2L;, dan ralat akan berlaku dilaporkan semasa menjalankan UnSerializable.java serialVersionUID

    Bagaimana untuk menggunakan pensirilan dan penyahserikatan Java

    Transient (transient variable)

    Transient (transient variable) ialah kata kunci Java, yang digunakan untuk menandakan pembolehubah ahli bagi kelas apabila diteruskan kepada bait Jangan bersiri semasa menstrim apabila menghantar aliran bait melalui aliran soket rangkaian, pembolehubah ahli yang ditandakan dengan kata kunci sementara tidak akan bersiri. Ini ialah pembolehubah statik yang diubah suai oleh statik dan tidak mengambil bahagian dalam operasi bersiri.

    Contoh pemahaman

    Tambah

    dan name masing-masing di hadapan pembolehubah age dan transient dalam Test.java static

    package Sentiment.unserialize.demo01;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    
    public class UnSerializable {
        public static void main(String[] args) throws IOException, ClassNotFoundException {
            ObjectInputStream In = new ObjectInputStream(new FileInputStream("1.txt"));
            Test o = (Test)In.readObject();
            System.out.println(o);
        }
    }
    Salin selepas log masuk

    sedang dilaksanakan pada masa ini Serializable.java dan UnSerializable.java, hasil keluaran: Sentimen—>null, 10—>0

    Bagaimana untuk menggunakan pensirilan dan penyahserikatan Java

    tulis semula kaedah readObject()

    Rasmi Membenarkan pengguna mengatasi kaedah readObject() dalam kelas bersiri Kaedah yang ditindih akan bertanggungjawab untuk membina semula objek kelas semasa semasa penyahserian Pengguna hanya perlu melaksanakan kaedah defaultReadObject() dalam kaedah readObject(). boleh memastikan bahawa proses penyahserikatan dilaksanakan seperti biasa

    Pemahaman instance

    Laksanakan panggilan kaedah defaultReadObject() dan tulis semula kaedah ini dalam kelas Ujian untuk melakukan pensirilan dan penyahserilan Anda boleh melaksanakan arahan.

    package Sentiment.unserialize.demo01;
    
    import java.io.Serializable;
    
    public class Test implements Serializable {
        public static final long serialVersionUID = 1L;   //定义serialVersionUID 
    
        private  String name;
        private  int age;
    
        public Test() {
        }
    
        public Test(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Test{" + "name=&#39;" + name + &#39;\&#39;&#39; + ", age=" + age + &#39;}&#39;;
        }
    
    }
    Salin selepas log masuk

    Bagaimana untuk menggunakan pensirilan dan penyahserikatan Java

    Atas ialah kandungan terperinci Bagaimana untuk menggunakan pensirilan dan penyahserikatan Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    sumber:yisu.com
    Kenyataan Laman Web ini
    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
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan