Rumah  >  Artikel  >  Java  >  Serialisasi dan Deserialisasi Di Jawa

Serialisasi dan Deserialisasi Di Jawa

DDD
DDDasal
2024-10-31 06:12:30826semak imbas

Serialization and Deserialization In Java

Dalam Java lanjutan, bersiri dan penyahsirilan ialah proses untuk menyimpan dan memulihkan keadaan objek, membolehkan objek disimpan dalam fail atau pangkalan data, atau memindahkannya melalui rangkaian. Berikut ialah pecahan konsep ini dan aplikasinya

1️⃣ Pensiri

Siri ialah proses menukar objek kepada aliran bait. Strim bait ini boleh disimpan ke fail, dihantar melalui rangkaian atau disimpan dalam pangkalan data. Di Java, antara muka Serializable digunakan untuk menunjukkan bahawa kelas boleh bersiri.

✍ Langkah untuk mensiri objek:

▶️ Laksanakan antara muka Boleh Bersiri.

▶️ Gunakan ObjectOutputStream dan FileOutputStream untuk menulis objek pada fail atau aliran output.

▶️ Panggil kaedah writeObject() pada ObjectOutputStream.

?Contoh Kod:

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class Employee implements Serializable {
    private static final long serialVersionUID = 1L;
    String name;
    int id;

    public Employee(String name, int id) {
        this.name = name;
        this.id = id;
    }
}

public class SerializeDemo {
    public static void main(String[] args) {
        Employee emp = new Employee("John Doe", 101);

        try (FileOutputStream fileOut = new FileOutputStream("employee.ser");
             ObjectOutputStream out = new ObjectOutputStream(fileOut)) {
            out.writeObject(emp);
            System.out.println("Serialized data is saved in employee.ser");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Di sini, employee.ser ialah fail bersiri yang menyimpan strim bait objek.

2️⃣ Penyahserikatan
Penyahserialisasian ialah proses terbalik, di mana aliran bait ditukar semula menjadi salinan objek asal. Ini membolehkan anda mencipta semula keadaan objek selepas ia disimpan atau dipindahkan.

✍ Langkah-langkah untuk menyahsiri objek:

▶️ Gunakan ObjectInputStream dan FileInputStream untuk membaca objek daripada fail atau aliran input.

▶️ Panggil kaedah readObject() pada ObjectInputStrea

?Contoh Kod:

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class DeserializeDemo {
    public static void main(String[] args) {
        Employee emp = null;

        try (FileInputStream fileIn = new FileInputStream("employee.ser");
             ObjectInputStream in = new ObjectInputStream(fileIn)) {
            emp = (Employee) in.readObject();
            System.out.println("Deserialized Employee...");
            System.out.println("Name: " + emp.name);
            System.out.println("ID: " + emp.id);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Ini akan mendapatkan semula keadaan asal objek, membenarkan akses kepada medannya seperti sebelum bersiri.

3️⃣ Topik Serialisasi Lanjutan

▶️ Pensiri Tersuai: Gantikan writeObject() dan readObject() untuk serialisasi tersuai.

▶️ Antara Muka Boleh Luar: Menyediakan kawalan penuh ke atas penyirian, memerlukan pelaksanaan kaedah writeExternal() dan readExternal().

▶️ Medan Sementara: Gunakan kata kunci sementara untuk mengelak daripada bersiri medan tertentu (cth., data sensitif seperti kata laluan).

✍ Kelebihan Serialisasi:

▶️ Membenarkan menyimpan keadaan objek untuk kegunaan masa hadapan.

▶️ Memudahkan pemindahan objek data kompleks melalui rangkaian.

? Terangkan Secara Ringkas Contoh Kod

import java.io.*;

class Student implements Serializable {
    private  static   final long serialVersionUId = 1l;
    private String name ;
    private int  age;
    private String Address;

    public Student(String name,int age,String Address){
        this.name = name;
        this.age = age;
        this.Address = Address;
    }
    public void setName(String name){
        this.name = name;
    }
    public void setAge(int age){
        this.age = age;
    }
    public void setAddress(String Address){
        this.Address = Address;
    }

    public String getName(){
        return name;
    }
    public String getAddress(){
        return Address;
    }
    public int getAge(){
        return age;
    }


    public String toString(){
        return ("Student name is "+this.getName()+", age is "+this.getAge()+", and address is "+this.getAddress());
    }
}

public class  JAVA3_Serialization {
    // when you implement Serializable then you must be write a serialVersionUId because when it serialise and deserialize it uniquely identify in the network
    // when u update ur object or anything then you have to update the serialVersionUId increment .
    // private  static   final long serialVersionUId = 1l;

    // transient  int x ;
    // If you do not want a particular value to serialise and Deserialize.
    // the value x, when you don't serialise and Deserialize Then transient you used.

    public static void main(String[] args) {

        Student student = new Student("kanha",21,"angul odisha");

        String filename = "D:\Advance JAVA\CLS3 JAVA\Test.txt"; // store the data in this location
        FileOutputStream fileOut = null; // write file
        ObjectOutputStream objOut = null; // create object
        //Serialization
        try {
            fileOut = new FileOutputStream(filename);
            objOut = new ObjectOutputStream(fileOut);
            objOut.writeObject(student);

            objOut.close();
            fileOut.close();

            System.out.println("Object has been serialise =\n"+student);
        } catch (IOException ex){
            System.out.println("error will occure");
        }

        //Deserialization
        FileInputStream fileIn = null;
        ObjectInputStream objIn = null;
        try {
            fileIn = new FileInputStream(filename);
            objIn = new ObjectInputStream(fileIn);
            Student object =(Student) objIn.readObject();
            System.out.println("object has been Deserialization =\n"+object);

            objIn.close();
            fileIn.close();

        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}

✍ Nota Penting:

▶️ Hanya ahli data bukan statik dan bukan sementara disiri secara lalai.

▶️ Objek boleh bersiri mesti memastikan keserasian antara versi jika kelas diubah suai selepas bersiri.

Untuk mendapatkan lebih banyak cerapan, sila sebut GitHub anda untuk contoh dan sampel kod yang mendalam! Beritahu saya jika anda mahukan sebarang pelarasan khusus.

GitHub - https://github.com/Prabhanjan-17p

Atas ialah kandungan terperinci Serialisasi dan Deserialisasi Di Jawa. 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