java
Java menyediakan mekanisme yang disebut serialisasi objek di mana suatu objek dapat direpresentasikan sebagai urutan byte yang mencakup data objek serta informasi tentang tipe objek dan tipe data yang disimpan dalam objek.
Setelah objek serial telah ditulis ke dalam file, dapat dibaca dari file dan deserialized yaitu, jenis informasi dan byte yang mewakili objek dan datanya dapat digunakan untuk membuat ulang objek dalam memori.
Yang paling mengesankan adalah bahwa seluruh proses adalah JVM independen, artinya sebuah objek dapat diserialisasikan pada satu platform dan dideserialisasi pada platform yang sama sekali berbeda.
Kelas ObjectInputStream dan ObjectOutputStream adalah aliran tingkat tinggi yang berisi metode untuk membuat serialisasi dan deserialisasi objek.
Kelas ObjectOutputStream berisi banyak metode tulis untuk menulis berbagai tipe data, tetapi satu metode khususnya menonjol −
public final void writeObject(Object x) throws IOException
Metode di atas membuat serial Object dan mengirimkannya ke aliran output. Demikian pula, kelas ObjectInputStream berisi metode berikut untuk deserializing objek −
public final Object readObject() throws IOException, ClassNotFoundException
Metode ini mengambil Obyek berikutnya keluar dari aliran dan deserialize itu. Nilai yang dikembalikan adalah Object, jadi Anda harus mentransmisikannya ke tipe data yang sesuai.
Untuk mendemonstrasikan cara kerja serialisasi di Java, saya akan menggunakan kelas Karyawan yang telah kita bahas di awal buku ini. Misalkan kita memiliki kelas Karyawan berikut, yang mengimplementasikan antarmuka 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 agar kelas berhasil diserialisasi, dua kondisi harus dipenuhi
Kelas harus mengimplementasikan antarmuka java.io.Serializable.
Semua bidang di kelas harus serializable. Jika suatu bidang tidak dapat diserialisasikan, bidang itu harus ditandai sementara .
Jika Anda ingin tahu apakah Kelas Standar Java dapat dibuat serial atau tidak, periksa dokumentasi untuk kelas tersebut. Tesnya sederhana:Jika kelas mengimplementasikan java.io.Serializable, maka itu serializable; jika tidak, tidak.
Kelas ObjectOutputStream digunakan untuk membuat serial Object. Program SerializeDemo berikut membuat instance objek Employee dan membuat serial menjadi file.
Ketika program selesai dieksekusi, sebuah file bernama employee.ser dibuat. Program tidak menghasilkan output apa pun, tetapi mempelajari kodenya dan mencoba menentukan apa yang sedang dilakukan program.
Catatan Saat membuat serial objek ke file, konvensi standar di Java adalah memberikan file .ser ekstensi.
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(); } } }
Program DeserializeDemo berikut melakukan deserialize objek Karyawan yang dibuat dalam program SerializeDemo. Pelajari programnya dan coba tentukan hasilnya
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); } }
Ini akan menghasilkan hasil berikut
Deserialized Employee... Name: Reyan Ali Address:Phokka Kuan, Ambehta Peer SSN: 0 Number:101
Berikut poin-poin penting yang perlu diperhatikan
Blok try/catch mencoba menangkap ClassNotFoundException, yang dideklarasikan oleh metode readObject(). Agar JVM dapat melakukan deserialize suatu objek, JVM harus dapat menemukan bytecode untuk kelas tersebut. Jika JVM tidak dapat menemukan kelas selama deserialisasi objek, JVM akan melempar ClassNotFoundException.
Perhatikan bahwa nilai kembalian readObject() dilemparkan ke referensi Karyawan.
Nilai bidang SSN adalah 11122333 ketika objek diserialisasikan, tetapi karena bidang tersebut bersifat sementara, nilai ini tidak dikirim ke aliran keluaran. Bidang SSN dari objek Employee yang di-deserial adalah 0.
java
Kelas Java PrintStream Dalam tutorial ini, kita akan belajar tentang kelas Java PrintStream dan metode print() dan printf() dengan bantuan contoh. PrintStream kelas java.io package dapat digunakan untuk menulis data keluaran dalam bentuk (teks) yang dapat dibaca secara umum alih-alih byte. Ini mem
Kelas Pembaca Java Dalam tutorial ini, kita akan belajar tentang Java Reader, subclass-nya dan metodenya dengan bantuan sebuah contoh. Reader kelas java.io package adalah superclass abstrak yang mewakili aliran karakter. Sejak Reader adalah kelas abstrak, itu tidak berguna dengan sendirinya. Namun
Kelas Penulis Java Dalam tutorial ini, kita akan belajar tentang Java Writer, subclass-nya dan metodenya dengan bantuan sebuah contoh. Writer kelas java.io package adalah superclass abstrak yang mewakili aliran karakter. Sejak Writer adalah kelas abstrak, itu tidak berguna dengan sendirinya. Namun
Kelas InputStreamReader Java Dalam tutorial ini, kita akan belajar tentang Java InputStreamReader dan metodenya dengan bantuan contoh. InputStreamReader kelas java.io package dapat digunakan untuk mengubah data dalam byte menjadi data dalam karakter. Ini memperluas kelas abstrak Reader . InputS