Dalam panggilan jarak jauh, parameter dan nilai pengembalian perlu ditransmisikan melalui jaringan. Penggunaan ini membutuhkan serialisasi untuk mengubah objek menjadi aliran byte, dan kemudian menghapus kembali ke objek dari satu ujung ke ujung lainnya.
Karena ada artikel sebelumnya yang menyebutkan Hessian, di sini kita akan secara singkat berbicara tentang perbedaan antara serialisasi Java dan serialisasi Hessian.
Pertama -tama, serialisasi Hessian jauh lebih efisien daripada serialisasi Java, dan aliran byte yang dihasilkan jauh lebih pendek. Tetapi secara relatif, serialisasi Java tidak dapat diandalkan, dan tidak selengkap dukungan serialisasi Java. Alasan untuk perbedaan seperti itu adalah untuk melihat implementasinya.
Mari kita bicara tentang serialisasi Java terlebih dahulu. Saya tidak akan berbicara tentang prinsip kerja khusus. Serialisasi Java akan membuat serialisasi metadata dan data bisnis dari kelas objek yang akan diserialisasi dari aliran byte, dan akan membuat serialisasi semua hal dalam seluruh hubungan warisan. Serial Byte Stream IT adalah deskripsi lengkap dari struktur objek ke konten, yang berisi semua informasi, sehingga kurang efisien dan aliran byte relatif besar. Tetapi karena semuanya memang serial, dapat dikatakan bahwa semuanya dapat ditransfer, sehingga juga lebih bermanfaat dan dapat diandalkan.
Adapun serialisasi Hessian, mekanisme implementasinya adalah untuk fokus pada data dan menyertai informasi tipe sederhana. Sama seperti Integer A = 1, Hessian akan membuat serial ke dalam aliran seperti saya 1. Saya mewakili int atau integer, dan 1 adalah konten data. Untuk objek yang kompleks, melalui mekanisme refleksi Java, Hessian membuat serial semua sifat objek sebagai peta, menghasilkan aliran seperti m -className PropertyName1 i 1 PropertiyName S StringValue (mungkin, lupa persis), yang berisi deskripsi tipe dasar dan konten data. Selama proses serialisasi, jika suatu objek muncul sebelumnya, Hessian akan secara langsung memasukkan blok seperti indeks R untuk mewakili posisi referensi, sehingga menghilangkan waktu serialisasi dan deserialisasi lagi. Harga melakukan ini adalah bahwa Hessian perlu menangani berbagai jenis secara berbeda (jadi Hessian malas dan tidak mendukung pendek), dan ia juga perlu menangani operasi khusus ketika menemukan objek khusus tertentu (seperti StacktraceElement). Dan pada saat yang sama, karena tidak masuk jauh ke dalam implementasi untuk melakukan serialisasi, akan ada inkonsistensi tertentu dalam beberapa kesempatan, seperti peta yang diperoleh melalui koleksi.
Serialisasi mengacu pada serialisasi objek ke dalam aliran byte untuk penyimpanan yang mudah atau transmisi jaringan; Sementara deserialisasi justru sebaliknya, mengubah aliran byte kembali ke suatu objek. Apa yang biasanya kami gunakan adalah metode serialisasi Hessian dan metode serialisasi Java. Efisiensi dan ukuran serialisasi dari dua metode serialisasi berbeda. Menilai dari hasil tes, Hessian lebih baik. Berikut adalah contoh serialisasi Hessian (tidak ada file IO dan jaringan IO, serialisasi murni dan deserialisasi):
/** * Serialisasi Hessian murni * @param objek * @return * @throws Exception */public static byte [] serialize (objek objek) melempar pengecualian {if (objek = null) {throw nullPointerException ();} bytearrayOutputStream oS = new BytearRayUpputSception ();} bytearrayutputStream OS = new bytearrayoutsception (); HesianserializerOutput (os); hessianoutput.writeObject (objek); return os.tobytearray ();}/** * deserialisasi hessian murni * @param bytes * @return * @throws Exception */public static objek deserialize (byte [] bytes) throws {new -new/byte {byte {byte {byte {byte {byte {byte {byte {byte) {byte {byte {byte {byte {byte) NullpointerException ();} bytearrayInputStream adalah = bytearrayinputStream baru (byte); hesiansieralizerInput hessianinput = hessianserializerInput baru (IS); objek objek = hessianinput.readObject (); objek pengembalian;}Metode umum lainnya adalah serialisasi Java:
/** * Serialisasi Java * @param obj * @return * @throws Exception */public static byte [] serialize (objek obj) melempar pengecualian {if (obj == null) lempar nullPointerException baru (); bytearrayOutputStream os = new bytearrayoutsputSception (); ObjectOutputStream(os);out.writeObject(obj);return os.toByteArray();}/** * java deserialization* @param by * @return * @throws Exception */public static Object deserialize(byte[] by) throws Exception {if (by == null)throw new NullPointerException();ByteArrayInputStream is = new BytearrayInputStream (oleh); objectInputStream in = new ObjectInputStream (IS); return in.readObject ();}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.