Di Java, semuanya adalah objek, dan di lingkungan terdistribusi, sering kali perlu untuk melewati suatu objek dari salah satu ujung jaringan atau perangkat ke ujung lainnya. Ini membutuhkan protokol yang dapat mengirimkan data di kedua ujungnya. Mekanisme serialisasi Java dibuat untuk menyelesaikan masalah ini.
Setelah mengubah status objek menjadi aliran byte, Anda dapat menyimpannya ke file menggunakan kelas berbagai aliran byte dalam paket java.io, pipa ke utas lain, atau mengirim data objek ke host lain melalui koneksi jaringan. Fungsi serialisasi objek sangat sederhana dan kuat, dan digunakan dalam RMI, Socket, JMS, dan EJB. Masalah serialisasi objek bukanlah masalah inti yang paling dalam pemrograman jaringan, tetapi sangat penting dan memiliki banyak signifikansi praktis.
Serialisasi objek Java tidak hanya menyimpan data dari satu objek, tetapi juga secara rekursif menyimpan data dari setiap objek yang dirujuk oleh objek. Seluruh hierarki objek dapat ditulis ke dalam aliran byte, disimpan dalam file, atau disahkan pada koneksi jaringan. Serialisasi objek dapat digunakan untuk melakukan "penyalinan yang dalam" dari objek, yaitu, menyalin objek itu sendiri dan objek yang dirujuk itu sendiri. Serialisasi suatu objek dapat menghasilkan urutan seluruh objek.
Metode Penggunaan Dasar:
Serialisasi mengacu pada bertahan kelas atau tipe data dasar ke dalam aliran data, termasuk file, aliran byte, dan aliran data jaringan.
Implementasi serialisasi di Java terutama bergantung pada dua kelas: Objectoututstream dan ObjectInputStream. Mereka adalah subclass outputstream dan inputstream dalam sistem Java IO. Karena mereka adalah aliran di Java IO, mereka dapat mengoperasikannya seperti aliran. Inilah cara mereka digunakan:
impor java.io.bytearrayInputStream; impor java.io.bytearrayoutputStream; impor java.io.ioException; impor java.io.objectInputStream; impor java.io.objectOutputStream; impor java.io.serializable; pasangan kelas publik mengimplementasikan serializable {private static final long serialversionuid = -1874850715617681161l; tipe int pribadi; nama string pribadi; public int getType () {type return; } public void setType (int tipe) {this.type = type; } public string getName () {return name; } public void setName (name string) {this.name = name; } pasangan publik (tipe int, nama string) {super (); this.type = type; this.name = name; } public static void main (string [] args) melempar ioException, classnotfoundException {// TODO METODE AUTO-AUTOERATED Stub // Serialize Object Pair ByTeArrayOutputStream BOS = ByTeArrayOutputStream baru (); ObjectOutputStream OOS = ObjectOutputStream baru (BOS); Pair pair = pasangan baru (1, "charlie"); oos.writeObject (pasangan); // deserialize objek, dapatkan objek baru newPair bytearrayInputStream bis = new bytearrayinputStream (bos.tobytearray ()); ObjectInputStream OIS = ObjectInputStream baru (BIS); Pair newPair = (pair) ois.readObject (); System.out.println (newPair.getType ()+":"+newPair.getName ()); }}1. Kedua kelas berada dalam pola dekorator. Saat membuatnya, mereka harus lewat dalam aliran berbasis byte. Aliran ini adalah yang benar -benar menyimpan data serial di bawah ini.
2. Kelas yang bertahan perlu mengimplementasikan antarmuka yang dapat diserialisasi. Antarmuka ini tidak memiliki fungsi, tetapi hanya antarmuka penandaan. Jika serialisasi dilakukan pada satu mesin dan data yang dihasilkan ditransmisikan ke mesin lain untuk deserialisasi, maka kelas pada kedua mesin ini harus persis sama, jika tidak serialisasi tidak akan berhasil.
3. Ingatlah untuk tidak menggunakan ToString untuk mendapatkan string dalam kode di atas, lalu dapatkan ByteArrayInputStream dari string ini, dan kemudian deserialisasi. BOS disimpan dalam byte. Konversi ke string yang disimpan dalam karakter pasti akan menyebabkan perubahan data, dan byte [] diambil dari string tidak akan menjadi byte sebelumnya []. Saya telah mengalami masalah ini karena saya ingin menyimpan data serial dalam file XML. Lihat artikel lain dalam solusi spesifik saya untuk masalah ini:
www.vevb.com/article/88130.htm
Apa yang dilakukan mesin virtual Java saat membuat serialisasi dan deserialisasi?
Mekanisme serialisasi Java dalam deskripsi kedua kelas ini dijelaskan secara rinci dalam Javadoc:
Mengutip
Mekanisme serialisasi default untuk suatu objek menulis kelas objek, tanda tangan kelas, dan nilai semua bidang yang tidak transien dan non-statis. Referensi untuk objek lain (kecuali dalam bidang sementara atau statis) menyebabkan objek tersebut ditulis juga. Beberapa referensi ke satu objek dikodekan menggunakan mekanisme berbagi referensi sehingga grafik objek dapat dikembalikan ke bentuk yang sama seperti ketika aslinya ditulis.
Mekanisme serialisasi default menulis data ke aliran meliputi:
1. Kelas tempat objek itu berada
2. Tanda Tangan Kelas
3. Semua sifat non-statis dan non-statis
4. Referensi ke objek lain juga akan menyebabkan serialisasi objek ini.
5. Jika beberapa referensi menunjuk ke suatu objek, maka mekanisme referensi berbagi akan digunakan.
Mengutip
Kelas yang membutuhkan penanganan khusus selama proses serialisasi dan deserialisasi harus menerapkan metode khusus dengan tanda tangan yang tepat ini:
private void readObject (java.io.objectInputStream Stream) melempar IoException, ClassNotFoundException; private void writeObject (java.io.objectOutputStream Stream) melempar ioException void private readObjectNodata () melempar ObjectStreamException;