Rumah >Java >javaTutorial >Bagaimana untuk menggunakan pensirilan dan penyahserikatan Java

Bagaimana untuk menggunakan pensirilan dan penyahserikatan Java

PHPz
PHPzke hadapan
2023-04-29 17:37:141384semak imbas

    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);

    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类中的构造方法进行传参

    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);

    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);        //读取后输出实例理解

    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='" + name + '\'' + ", age=" + age + '}';
        }
    
    }

    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();
        }
    }

    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);
        }
    }

    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='" + name + '\'' + ", age=" + age + '}';
        }
    
    }

    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!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam