JavaRush /Java Blog /Random-ID /Antarmuka - penanda
dupliaka
Level 29
Санкт-Петербург

Antarmuka - penanda

Dipublikasikan di grup Random-ID
Antarmuka penanda adalah pola desain dengan pemeriksaan tipe run-time yang memungkinkan Anda mengaitkan antarmuka dan kelas. Untuk memahami mengapa hal ini mungkin diperlukan, pertimbangkan contoh menandai kelas Serializible dengan spidol. Mari kita asumsikan bahwa kita perlu menyimpan status suatu objek di memori, dan kemudian juga dapat mendekripsi apa yang kita simpan. Kemudian, Anda berkata, kita dapat mengubah objek kita menjadi sekumpulan bit. Benar. Kita dapat menggunakan cara sederhana untuk menulis ke file menggunakan FileInputStream, tetapi ini hanya berguna jika objeknya sedikit, tetapi bagaimana jika objeknya banyak? Ada alat serialisasi yang bagus untuk ini. Aturan utama saat menggunakannya adalah objek yang diserialkan harus berisi semua data dan tidak merujuk ke objek lain. Lihatlah kelas Anda “Aha, bidangnya tidak direferensikan dan ada baiknya untuk memasang penanda Serializable.” Dan bila Anda menaruhnya, berarti objek yang Anda tandai dapat ditulis ke ObjectOutputStream. Kelas ObjectOutputStream memiliki metode writeObject0(), dan berisi pemeriksaan instanceof yang memeriksa apakah objek dapat ditulis dan jika seluruh rangkaian pemeriksaan gagal, maka pengecualian NotSerializableException akan dilemparkan, dan jika tidak, semuanya ditulis dengan rapi ke memori. Mari kita buat kelas BigObject, yang instance-nya akan kita serialisasi.Kelas package post1; import java.io.Serializable; public class BigObject implements Serializable { private int id; public void setId(final int id){ this.id = id; } public int getId() { return id; } } BigObject sudah ditandai sebagai Serializable. Ini memiliki satu bidang id dan metode get/set yang menyertainya. package post1; import post1.BigObject; import java.io.*; public class InterfaceMarker { public static void main(String[] args) throws IOException, ClassNotFoundException { int originalId = 12; BigObject objectOriginal = new BigObject(); objectOriginal.setId(originalId); ByteArrayOutputStream writeBuffer = new ByteArrayOutputStream(); ObjectOutputStream outputStream = new ObjectOutputStream(writeBuffer); outputStream.writeObject(objectOriginal); outputStream.close(); byte[] buffer = writeBuffer.toByteArray(); ByteArrayInputStream readBuffer = new ByteArrayInputStream(buffer); ObjectInputStream inputStream = new ObjectInputStream(readBuffer); BigObject objectCopy = (BigObject)inputStream.readObject(); if (objectCopy.getId() == originalId) System.out.println( "originalId equals copiedId"); } }

Merekam suatu objek

Pertama, kita membuat objek dari kelas BigObject yang dapat diserialkan, lalu kita menyiapkan buffer data untuknya - tempat di mana kita akan meletakkan semua busur ByteArrayOutputStream. Kemudian kita menyiapkan ObjectOutputStream yang telah disebutkan dan meneruskan buffer ke dalamnya.Kita menulis objek kita ke aliran dan menutupnya.

Membaca suatu objek

Mari siapkan buffer tulis readBuffer, teruskan inputStream, baca readObject(). Objek tersebut kini telah dipulihkan. Berkat fakta bahwa bidang `id` bukan tautan, kami dapat menandai kelas Serializable, yang berisi data lengkapnya. Daripada menambahkan fungsi validasi di dalam kelas kita, token memungkinkan kita menyederhanakan proses validasi kelas.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION