Latest web development tutorials

serialisasi java

Java menyediakan mekanisme objek-serialisasi, yang, obyek dapat direpresentasikan sebagai urutan byte, urutan byte meliputi jenis data objek, informasi tentang objek dan jenis data yang disimpan dalam objek .

Setelah file tersebut ditulis ke objek serial dapat dibaca dari file tersebut, dan itu deserialized, yaitu, jenis informasi objek, objek data, dan tipe data objek dapat digunakan dalam memori benda baru.

Seluruh proses adalah Virtual Machine Java (JVM) independen, yaitu, pada platform serial objek dapat deserialize objek pada platform yang sama sekali berbeda.

ObjectInputStream dan ObjectOutputStream kelas tingkat tinggi data stream, serialisasi dan metode mereka mengandung anti-urutan objek.

kelas ObjectOutputStream berisi banyak metode menulis untuk menulis berbagai jenis data, tapi cara pengecualian khusus:

public final void writeObject(Object x) throws IOException

Metode di atas cerita bersambung objek dan mengirimkannya ke output stream. kelas ObjectInputStream serupa berisi berikut deserialize metode obyek:

public final Object readObject() throws IOException, 
                                 ClassNotFoundException

Metode ini mengambil objek berikutnya dari sungai, dan objek deserialized. nilai kembali adalah Object, sehingga Anda perlu untuk mengubahnya menjadi tipe data yang sesuai.

Untuk menunjukkan serialisasi Jawa adalah cara kerjanya, saya akan menggunakan tutorial kelas Karyawan disebutkan sebelumnya, jika kita mendefinisikan kelas karyawan berikut, yang mengimplementasikan interface Serializable.

public class Employee implements java.io.Serializable
{
   public String name;
   public String address;
   public transient int SSN;
   public int number;
   public void mailCheck()
   {
      System.out.println("Mailing a check to " + name
                           + " " + address);
   }
}

Perhatikan bahwa serialisasi objek kelas untuk berhasil, dua kondisi yang harus dipenuhi:

kelas harus menerapkan objek java.io.Serializable.

Semua atribut tersebut harus serializable. Jika ada properti tidak serializable, properti harus dinyatakan secara singkat.

Jika Anda ingin tahu apakah kelas standar Java adalah serializable, lihat dokumentasi untuk kelas ini. Menguji apakah sebuah instance dari kelas dapat serial sangat sederhana, hanya perlu melihat kelas belum mencapai antarmuka java.io.Serializable.


serial objek

kelas ObjectOutputStream digunakan untuk cerita bersambung obyek, SerializeDemo mengikuti contoh instantiates objek Karyawan, dan objek adalah serial ke file.

Setelah program ini dijalankan, itu menciptakan sebuah file bernama employee.ser. Program ini tidak memiliki output, tetapi Anda dapat membaca kode untuk memahami peran dari sebuah program.

Catatan: Ketika sebuah benda adalah serial ke file, sesuai dengan konvensi Java standar untuk mengajukan perpanjangan .ser.

import java.io.*;

public class SerializeDemo
{
   public static void main(String [] args)
   {
      Employee e = new Employee();
      e.name = "Reyan Ali";
      e.address = "Phokka Kuan, Ambehta Peer";
      e.SSN = 11122333;
      e.number = 101;
      try
      {
         FileOutputStream fileOut =
         new FileOutputStream("/tmp/employee.ser");
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(e);
         out.close();
         fileOut.close();
         System.out.printf("Serialized data is saved in /tmp/employee.ser");
      }catch(IOException i)
      {
          i.printStackTrace();
      }
   }
}

benda deserialize

Berikut contoh program DeserializeDemo deserialization, / tmp / employee.ser disimpan objek Karyawan.

import java.io.*;
public class DeserializeDemo
{
   public static void main(String [] args)
   {
      Employee e = null;
      try
      {
         FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
         ObjectInputStream in = new ObjectInputStream(fileIn);
         e = (Employee) in.readObject();
         in.close();
         fileIn.close();
      }catch(IOException i)
      {
         i.printStackTrace();
         return;
      }catch(ClassNotFoundException c)
      {
         System.out.println("Employee class not found");
         c.printStackTrace();
         return;
      }
      System.out.println("Deserialized Employee...");
      System.out.println("Name: " + e.name);
      System.out.println("Address: " + e.address);
      System.out.println("SSN: " + e.SSN);
      System.out.println("Number: " + e.number);
    }
}

Mengkompilasi dan menjalankan program di atas hasilnya adalah sebagai berikut:

Deserialized Employee...
Name: Reyan Ali
Address:Phokka Kuan, Ambehta Peer
SSN: 0
Number:101

Di sini kita harus perhatikan hal berikut:

readObject () metode dalam mencoba / menangkap blok upaya untuk menangkap ClassNotFoundException pengecualian. Untuk JVM dapat deserialize objek, harus dapat menemukan kelas bytecode. Jika JVM tidak dapat menemukan kelas dalam objek proses deserialization, melempar pengecualian ClassNotFoundException.

Perhatikan bahwa nilai kembali, metode readObject () dikonversi menjadi referensi Karyawan.

Ketika suatu objek serial, nilai SSN properti 111 222 333, tetapi karena properti pendek, nilai tidak dikirim ke output stream. Jadi SSN atribut deserialized objek Karyawan adalah 0.