"Anda akan ingat bahawa hari ini kami menyiasat menyimpan objek dan membacanya daripada fail?"

"Ya, kami baru sahaja menyimpan ke aliran keluaran, bacaan daripada aliran input."

"Syabas, Amigo. Senang mendengar anda melihat butiran ini. Adakah anda boleh melengkapkan kod itu supaya ia disimpan dan dibaca daripada fail?"

"Lengkapkan apa?! Isytiharkan FileInputStream dan FileOutputStream dan serahkannya kepada kaedah simpan dan muat. Tiada apa yang perlu dikelirukan di sini. Sangat mudah."

"Saya gembira untuk anda. Sekarang untuk topik baharu: bersiri ."

Pensirian hampir sama seperti yang baru kami lakukan, tetapi lebih sejuk dan dibina terus ke dalam mesin Java. Mesin Java boleh menyimpan dan memuatkan objeknya. Ia tidak memerlukan kaedah simpan dan muat untuk melakukannya: Semua objek disimpan di dalam mesin Java, dan ia mempunyai akses penuh kepadanya."

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

Kod
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 sahaja?"

"Tepat sekali. Terdapat mekanisme bersiri yang sangat besar dan kompleks yang membolehkan kami menyimpan ke strim dan membaca daripada aliran hampir semua jenis data."

"Hampir ada. Jadi bukan sebarang jenis data?"

"Ya, hakikatnya tidak semua objek mempunyai keupayaan yang wujud untuk disimpan . Sesetengah objek tidak menyimpan semua data mereka secara dalaman. Sebaliknya, mereka hanya merujuk kepada objek lain dan/atau sumber data. Contohnya, konsol (System. dalam), aliran input (InputStream) dan perkara lain."

Itulah sebabnya pencipta Java menghasilkan penanda antara muka Serializable khas . Ia dipanggil penanda , kerana ia tidak mengandungi sebarang data dan kaedah. Ia hanya digunakan untuk "menandai" atau "menanda" kelas. Jika kami percaya bahawa kelas kami menyimpan semua datanya secara dalaman, maka kami boleh menandainya dengan implements Serializable .

Berikut ialah contoh «kucing» dengan sokongan untuk penyiaran:

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

Apabila kita cuba menyiri (menyimpan) objek, mesin Java menyemak sama ada ia menyokong penyirian: Adakah ia melaksanakan antara muka Serializable? Jika ia berlaku, maka ia menyimpan objek. Jika tidak, maka ia membuang pengecualian untuk menunjukkan bahawa serialisasi adalah mustahil.
Di sini anda perlu memahami bahawa objek boleh bersiri mestilah hanya terdiri daripada objek boleh bersiri.

"Nah, itu masuk akal. Anda tidak boleh menyelamatkan keseluruhannya tanpa menyelamatkan bahagiannya."

"Tepat sekali."

"Dan bagaimana pula dengan ints, Strings dan ArrayLists?"

"Mereka semua menyokong penyiaran. Pencipta Java mengambil perhatian khusus untuk memastikan ini berlaku. Tidak sepatutnya ada sebarang masalah di sini."

Selain itu, jenis objek disimpan apabila objek bersiri. Kini anda boleh menyimpan rujukan kepada objek Cat dalam pembolehubah Objek. Semuanya akan bersiri dan desirialisasi dengan baik.

"Deserialize?"

" Deserialisasi ialah proses membalikkan siri: membaca dan membina semula objek daripada aliran/fail."

"Ah, tiada soalan lagi."