"Anda akan ingat bahwa hari ini kita menyelidiki menyimpan objek ke dan membacanya dari sebuah file?"

"Ya, kami baru saja menyimpan ke aliran keluaran, membaca dari aliran masukan."

"Bagus sekali, Amigo. Senang mendengar bahwa Anda memperhatikan detail ini. Apakah Anda dapat menyelesaikan kodenya sehingga dapat disimpan dan dibaca dari file?"

"Selesaikan apa?! Deklarasikan FileInputStream dan FileOutputStream dan teruskan ke metode simpan dan muat. Tidak ada yang perlu dibingungkan di sini. Sangat sederhana."

"Aku senang untukmu. Sekarang untuk topik baru: serialisasi ."

Serialisasi hampir sama dengan yang baru saja kita lakukan, tetapi jauh lebih keren dan dibangun langsung ke dalam mesin Java. Mesin Java dapat menyimpan dan memuat objeknya. Ia bahkan tidak memerlukan metode simpan dan muat untuk melakukannya: Semua objek disimpan di dalam mesin Java, dan ia memiliki akses penuh ke sana."

Kami hanya mengambil objek dan menyimpannya ke aliran dan membaca dari aliran:

Kode
public static void main(String[] args) throws Exception
{
 Cat cat = new Cat();

 //Save a cat to file
 FileOutputStream fileOutput = new FileOutputStream("cat.dat");
 ObjectOutputStream outputStream = new ObjectOutputStream(fileOutput);
 outputStream.writeObject(cat);
 fileOutput.close();
 outputStream.close();

 //Load a cat from file
 FileInputStream fiStream = new FileInputStream("cat.dat");
 ObjectInputStream objectStream = new ObjectInputStream(fiStream);
 Object object = objectStream.readObject();
 fiStream.close();
 objectStream.close();

 Cat newCat = (Cat)object;
}

"Itu dia?"

"Tepat sekali. Ada mekanisme serialisasi yang sangat besar dan rumit yang memungkinkan kita menyimpan ke aliran dan membaca aliran dari hampir semua tipe data."

"Hampir semua. Jadi bukan tipe data apa pun?"

"Ya, faktanya adalah tidak semua objek memiliki kemampuan bawaan untuk diselamatkan . Beberapa objek tidak menyimpan semua datanya secara internal. Sebaliknya, mereka hanya mereferensikan objek lain dan/atau sumber data. Misalnya, konsol (System. in), aliran input (InputStream), dan hal lainnya."

Itu sebabnya pencipta Java datang dengan penanda antarmuka Serializable khusus . Disebut marker , karena tidak berisi data dan metode apa pun. Ini hanya digunakan untuk "menandai" atau "menandai" kelas. Jika kita yakin bahwa kelas kita menyimpan semua datanya secara internal, maka kita dapat menandainya dengan mengimplementasikan Serializable .

Inilah contoh «kucing» dengan dukungan untuk serialisasi:

Kode
class Cat implements Serializable
{
 public String name;
 public int age;
 public int weight;
}

Saat kami mencoba membuat cerita bersambung (menyimpan) sebuah objek, mesin Java memeriksa apakah ia mendukung serialisasi: Apakah ia mengimplementasikan antarmuka Serializable? Jika ya, maka itu akan menyimpan objek. Jika tidak, maka pengecualian akan muncul untuk menunjukkan bahwa serialisasi tidak mungkin dilakukan.
Di sini Anda perlu memahami bahwa objek serializable hanya boleh terdiri dari objek serializable.

"Yah, itu masuk akal. Kamu tidak bisa menyelamatkan keseluruhannya tanpa menyimpan bagian-bagiannya."

"Tepat."

"Dan bagaimana dengan int, String, dan ArrayLists?"

"Mereka semua mendukung serialisasi. Pembuat Java memberikan perhatian khusus untuk memastikan hal ini terjadi. Seharusnya tidak ada masalah di sini."

Selain itu, tipe objek disimpan saat objek diserialisasi. Sekarang Anda dapat menyimpan referensi ke objek Cat dalam variabel Object. Semuanya akan membuat serial dan deserial dengan baik.

"Deserialisasi?"

" Deserialisasi adalah proses membalikkan serialisasi: membaca dan merekonstruksi objek dari aliran/file."

"Ah, tidak ada pertanyaan lagi kalau begitu."