"Merhaba Amigo! Ellie'nin sana anlattıklarına biraz ekleme yapmak istiyorum."

Bazen serileştirme sürecini kontrol etmeniz gerekir. İşte nedenlerinden bazıları:

1) Bir nesne serileştirmeye hazır değil : mevcut dahili durumu değişme sürecinde.

2) Bir nesne serileştirilemeyen nesneler içerir, ancak bunları kolayca serileştirilebilen bir forma dönüştürebilir , örneğin onları bir bayt dizisi veya başka bir şey olarak kaydedebilir.

3) Bir nesne, tüm verilerini tek bir birim olarak seri durumdan çıkarmak ve/veya seri hale getirmeden önce şifrelemek istiyor.

Serileştirmeyi manuel olarak gerçekleştirmek isteyebileceğiniz birçok neden vardır. Ancak standart serileştirmenin sunduğu tüm avantajları kaybetmek istemiyoruz. Sonuçta, bizim nesnemiz başka nesneleri kullanabilir. Ancak nesnemiz serileştirmeyi desteklemiyorsa serileştirilemezler.

Bu durumun da bir çözümü var: Dışsallaştırılabilir arayüz. Java'nın vizyon sahibi yaratıcılarına teşekkür etmeliyiz. Seri hale getirilebilir arabirimi Externalizable arabirimiyle değiştirmeniz yeterlidir ve sınıfınız seri hale getirme sürecini manuel olarak yönetebilir.

Externalizable arabirimi, Serializable arabiriminde olmayan, bir nesne serileştirildiğinde Java makinesi tarafından çağrılan iki yönteme sahiptir . İşte böyle görünüyor:

kod
class Cat implements Externalizable
{
 public String name;
 public int age;
 public int weight;

 public void writeExternal(ObjectOutput out)
 {
  out.writeObject(name);
  out.writeInt(age);
  out.writeInt(weight);
}

 public void readExternal(ObjectInput in)
 {
  name = (String) in.readObject();
  age = in.readInt();
  weight = in.readInt();
 }
}

Sana bir şey hatırlattı mı?

"Vay canına! Serileştirmeyi düşünmeden önce nesneleri tam olarak bu şekilde kurtarmaya çalışıyorduk."

"Bu, her şeyi kolaylaştırıyor: standart serileştirme yeterliyse, Seri hale getirilebilir arabirimi devralırız. Yeterli değilse, o zaman Externalizable'ı devralır ve nesnemizi kaydetmek/yüklemek için kendi kodumuzu yazarız."

"Fakat, Externalizable olarak işaretlenmiş bir sınıf, seri hale getirilebilir olarak kabul edilir mi? Böyle bir sınıfı, seri hale getirilebilir sınıflarımıza referansları "güvenli bir şekilde" depolamak için kullanabilir miyiz?

"Evet. Bir sınıf Serializable veya Externalizable uygularsa , seri hale getirilebilir kabul edilir."

"Mükemmel bir çözüm. Bunu beğendim."

"Bunu duyduğuma sevindim. Ama dahası da var... Tüm nüansları Profesör Hans'a sormalısın. Kesinlikle varlar. Sana okuyacak bir şeyler vermek istedi."