Antarmuka Serializable di Jawa dengan Contoh
Diterbitkan: 2021-11-29Java menawarkan beberapa paket, salah satunya adalah antarmuka Serializable. Itu hadir dalam paket Java java.io dan merupakan jenis antarmuka penanda. Ketika didefinisikan sebagai antarmuka penanda, tidak ada metode atau bidang yang ada di antarmuka. Jadi, setiap kali ada kelas yang mengimplementasikan antarmuka, antarmuka tidak diharuskan untuk mengimplementasikan metode apa pun. Kelas-kelas tersebut mengimplementasikan antarmuka jika suatu kelas ingin instance mereka diserialisasi atau dideserialisasi.
Mekanisme serialisasi digunakan untuk mengubah status objek menjadi aliran byte. Mekanisme ini dilakukan dengan menggunakan ObjectOutputStream. Proses deserialisasi adalah kebalikan dari proses serialisasi. Dalam hal ini, aliran byte diubah kembali ke objek Java. ObjectInputStream digunakan untuk deserialisasi.
Daftar isi
Serialisasi
Konversi keadaan objek apa pun menjadi aliran byte dikenal sebagai serialisasi. Dan kebalikan dari serialisasi adalah deserialisasi. Objek Java dapat diubah menjadi aliran byte statis. Aliran statis ini kemudian dapat disimpan di database, atau juga dapat ditransfer ke jaringan yang berbeda. Proses serialisasi bergantung pada instance. Ini berarti serialisasi objek dapat dilakukan pada satu platform, dan kemudian deserialisasi objek dapat dilakukan pada platform lain. Jenis antarmuka penanda tertentu, "Serializable," diimplementasikan untuk proses serialisasi. Jadi, kelas yang memenuhi syarat untuk serialisasi, yaitu kelas yang dapat diserialisasikan di Java , harus mengimplementasikan antarmuka penanda.
Mekanisme penulisan status objek ke dalam aliran byte ini dikenal sebagai serialisasi. Mekanisme ini terutama digunakan dalam teknologi JMS, EJB, JPA, RMI, dan Hibernate.
ObjectInputStream dan ObjectOutputStream adalah bentuk kelas tingkat tinggi yang memperluas java.io.InputStream dan java.io.OutputStream. Tipe primitif dan grafik objek dapat ditulis ke OutputStream oleh ObjectOutputStream dalam satu byte
sungai kecil. Aliran yang dihasilkan dari konversi dapat dibaca melalui ObjectInputStream. Jadi, untuk serialisasi, metode writeObject() dipanggil dari ObjectOutputStream dan untuk deserialisasi, metode readObject() dipanggil dari kelas ObjectInputStream.
Metode yang paling penting dalam ObjectOutputStream adalah:
Baris kode di atas diambil dari https://www.baeldung.com/java-serialization.
Pada baris kode di atas, sebuah objek yang serializable diambil, dan kemudian diubah menjadi aliran atau aliran byte.
Dalam kasus ObjectInputStream, metode yang paling penting adalah:
Baris kode di atas diambil dari https://www.baeldung.com/java-serialization.
Baris kode di atas dapat membaca urutan byte dan mengubah aliran byte ini menjadi objek Java. Objek asli dapat dilemparkan kembali melalui ini.
Ilustrasi proses serialisasi dapat dijelaskan di bawah ini:
Kelas "Orang" dipertimbangkan untuk serialisasi. Bidang statis tidak serial, dan mereka milik beberapa kelas. Bidang kelas dapat diabaikan dengan menggunakan kata kunci "sementara" dalam proses serialisasi.
Sumber
Objek tipe orang dapat disimpan ke beberapa file lokal, dan kemudian nilainya dibaca kembali. Kode yang ditampilkan di bawah ini dapat digunakan untuk tujuan ini.
ObjectOutputStream digunakan untuk menyimpan status objek ke dalam file melalui penggunaan FileOutputStream. Dalam contoh ini, sebuah file bernama "yourfile.txt" telah dibuat di direktori proyek. Melalui penggunaan FileInputStream, file yang dibuat akan dimuat. Aliran ini kemudian diambil oleh ObjectInputStream dan diubah menjadi objek baru dengan nama p2. Status objek yang dimuat akhirnya diuji, dan dicocokkan dengan status objek aslinya. Objek yang dimuat harus dilemparkan secara eksplisit ke orang biasa.
Peringatan dalam serialisasi Java
1. Warisan dan Komposisi
Setiap kali pengguna mengimplementasikan antarmuka java.io.Serializable, semua sub-kelas kelas yang mengimplementasikan antarmuka menjadi serializable. Juga, jika suatu objek menyimpan referensi ke objek yang berbeda, objek yang dirujuk untuk mengimplementasikan antarmuka dapat serial secara terpisah; jika objek-objek ini tidak mengimplementasikan antarmuka, maka pengecualian akan dibuang. Pengecualian yang dibuang adalah NotSerializableException. Juga, jika misalkan array objek disimpan pada objek serial, semua objek array harus diserialisasi. Jika tidak ada serialisasi objek yang terjadi, maka pengecualian "NotSerializableException" akan muncul.
2. UID Versi Serial
Untuk setiap kelas yang mengimplementasikan antarmuka Serializable, nomor dikaitkan dengan masing-masing kelas. Nomor tersebut terkait dengan Java Virtual Machine. Ini terutama dilakukan untuk memverifikasi bahwa objek yang dimuat dan disimpan memiliki atribut yang tepat. Hanya jika atributnya sama, objek akan kompatibel pada serialisasi. IDE menghasilkan angka-angka ini secara otomatis dan terutama didasarkan pada nama kelas, atributnya, dan pengubah akses yang terkait dengannya. Pengecualian, "InvalidClassException," akan dilemparkan jika nomor yang berbeda dihasilkan dari perubahan.
Jika serialVersionUID tidak dideklarasikan oleh kelas serializable, JVM akan secara otomatis menghasilkannya selama run time. Meskipun akan ada pembuatan nomor secara otomatis, tetap disarankan agar kelas mendeklarasikan serialVersionUID. Ini karena serialVersionUID, yang akan dibuat secara otomatis, akan bergantung pada kompiler dan terkadang dapat memunculkan InvalidClassExceptions yang tidak diharapkan.
3. Serialisasi khusus
Cara default telah ditetapkan di Java untuk membuat serial objek. Java dapat mengganti perilaku default ini. Ada cara untuk serialisasi khusus. Hal ini sangat berguna dalam kasus di mana objek yang memiliki atribut unserializable sedang dicoba untuk diserialisasi. Serialisasi untuk objek tersebut dapat dilakukan melalui dua metode di dalam kelas yang ingin dibuat serial oleh pengguna. Kedua metode ini adalah:
Dua metode di atas dapat digunakan untuk membuat serialisasi atribut ke dalam bentuk apa pun yang dapat diserialisasikan, yang sebelumnya tidak dapat diserialisasikan.
Keuntungan serialisasi di Java
Salah satu keuntungan serialisasi di Java adalah bahwa keadaan suatu objek dapat dilalui di jaringan.
Antarmuka Java java.io.Serializable
java.io.Serializable adalah antarmuka penanda yang berarti tidak ada metode dan objek di dalam antarmuka. Fungsi utama antarmuka penanda adalah untuk menandai
kelas Java untuk memberikan kemampuan tertentu untuk semua objek dari kelas. Contoh antarmuka penanda adalah Remote dan Cloneable.
Antarmuka harus diimplementasikan oleh setiap kelas yang menggunakan antarmuka untuk membuat serial objeknya. Secara default, kelas seperti kelas pembungkus dan kelas String mengimplementasikan antarmuka java.io.Serializable.
Contoh Java serializable ditunjukkan di bawah ini.
Dalam kode di atas, dapat diamati bahwa kelas Siswa mengimplementasikan antarmuka Serializable. Oleh karena itu setelah kelas mengimplementasikan antarmuka Serializable, objek di dalam kelas dapat diubah menjadi byte aliran.
Kelas ObjectOutputStream
Kelas ini digunakan untuk menulis tipe data primitif dan objek Java ke dalam OutputStream. Objek yang mendukung antarmuka java.io.Serializable dapat digunakan untuk menulis ke dalam aliran.
Kelas ObjectInputStream
Semua data primitif yang ditulis menggunakan ObjectOutputStream dideserialisasi dengan menggunakan ObjectInputStream.
Contoh antarmuka Serializable di Java ditunjukkan di bawah ini.
Dalam contoh ini, kelas Siswa akan diserialisasi. Metode writeObject() dari kelas ObjectOutputStream, menyediakan semua fungsionalitas untuk membuat serial objek. Status objek disimpan dalam file dengan nama f.txt.
Kesimpulan
Artikel tersebut membahas tentang konsep serialisasi dalam Java. Itu mencantumkan antarmuka dan metode penting lainnya yang diperlukan untuk membuat serial objek dari suatu kelas. Proses serialisasi selalu dikaitkan dengan id atau nomor dengan setiap kelas serializable. Nomor ini disebut sebagai SerialVersionUID. Penggunaan utama SerialVersionUID adalah untuk memverifikasi pengirim dan penerima untuk objek yang akan diserialisasi. Ini karena pengirim dan penerima harus sama.
Ini adalah fitur penting dari bahasa pemrograman Java. Jika Anda ingin tahu lebih banyak tentang fitur dan konsep penting di Java dan menguasai keterampilan bahasa pemrograman Anda, Anda dapat memeriksa Kursus Rekayasa Perangkat Lunak yang ditawarkan oleh upGrad. Jika Anda seorang profesional yang bekerja, kursus ini paling cocok untuk Anda. Untuk segala bentuk pertanyaan, tim bantuan kami dapat dihubungi. Anda juga dapat menelusuri situs web kami untuk kursus tertentu dan mendapatkan informasi terperinci. Antarmuka serializable adalah antarmuka penanda. Antarmuka penanda memberikan petunjuk ke runtime Java bahwa kelas pelaksana mengizinkan dirinya untuk diserialisasi. Runtime akan memanfaatkan antarmuka ini untuk membuat serial objek. Antarmuka serializable di java adalah antarmuka khusus untuk diimplementasikan oleh kelas data di java. Ketika sebuah kelas mengimplementasikan antarmuka ini, itu dapat dipertahankan dalam database. Antarmuka ini dideklarasikan dalam paket java.io. Antarmuka serializable memiliki dua metode, readResolve() dan writeReplace() , yang digunakan untuk membaca dan menulis objek dalam database. Menerapkan antarmuka Serializable di Java berarti memiliki objek yang dapat diserialisasi dan di-de-serial dalam sistem apa pun yang memiliki antarmuka Serializable. Implementasi antarmuka tersebut akan efektif ketika kelas sedang diserialisasikan secara eksternal oleh perpustakaan pihak ketiga (JSON, XML, dll.) atau oleh protokol jaringan. Ketika sebuah variabel dideklarasikan sebagai Serializable, maka setiap instance dari variabel tersebut akan diserialisasikan dan dideserialisasi jika dilewatkan sebagai parameter ke suatu metode atau ketika dikembalikan dari suatu metode. Serialisasi dilakukan secara terprogram sehingga keadaan suatu objek dapat dipertahankan untuk nanti, ketika perlu dideserialisasi dan disajikan kepada pengguna objek. Objek serial adalah objek yang berisi aliran byte. Konstruktor objek atau metode writeObject() / readObject() digunakan untuk menempatkan aliran byte ke dalam objek. Data yang disimpan dapat berupa teks, audio, video, atau data aplikasi khusus lainnya. Data untuk objek ini dapat disimpan dalam file atau di server jauh. Untuk mentransfer objek serial melalui jaringan, seseorang harus menggunakan protokol RMI (Remote Method Invocation). RMI adalah protokol yang baik untuk membuat aplikasi terdistribusi. Ini memungkinkan klien untuk berkomunikasi dengan metode pada objek dalam aplikasi Java yang berjalan di server. Protokol RMI adalah mekanisme Remote Procedure Call (RPC). Apa antarmuka serial di Jawa?
Apa yang terjadi jika kita mengimplementasikan antarmuka Serializable di Java?
Bisakah kita mentransfer objek serial melalui jaringan?