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"); } }
GO TO FULL VERSION