Java’da Serileştirme(Serialization)

Object Serialization(Nesneleri Serileştirme) kullanarak nesneler byte dizisi haline getirilebilir bu sayede nesneler program kapatıldığında dahi kalıcı olmuş olacaklardır. 

Serileştirilmiş nesnelerin  tekrar belleğe yüklenmesi için de Object Deserialization kullanılır. Deserialization işleminden sonra nesneler kullanılabilir halde olurlar.

 

Bu 2 işlem için gerekli olanlar :

  • Serializable Arayüzü(Interface) –> Bu arayüzü sağlayan(implements) sınıflar serileştirilebilir olduğunu söylemektedir.

  • ObjectOutputStream,FileOutputStream –> Bu sınıflar bir nesnenin serialization işleminde kullanılır. Nesnenin nereye yazılacağının bilgisini FileOutputStream ile belirlenir. ObjectOutputStream ise FileOutputStream sınıfının örneğini kullanarak nesneyi yazar.

  • ObjectInputStream,FileInputStream –> Bu sınıflar bir nesnenin deserialization işleminde kullanılır. Nesnenin nereden okunacağının bilgisini FileInputStream ile belirlenir. ObjectInputStream ise FileInputStream sınıfının örneğini kullanarak nesneyi okur.

Kullanılan Sınıflar :

  •  Yukarda tanımlanan Calisan sınıfı görüldüğü üzere Insan sınıfından türetilmiş ve Serializable olarak işaretlenmiştir. Burda önemli olan nokta Serializable arayüzünü gerçeklemiş olmasıdır. Buna ek olarak eğer bir sınıfın üst sınıfı Serializable arayüzünü gerçeklemişse ondan türetilen sınıflar da Serializable işlemine tâbi olabilirler.

  • serialVersionUID, yazdırılan nesnelerin versiyon kontrolünü sağlamak için kullanılır.Eklenmediği durumda Eclipse uyarı verir. “@SupressWarning(Serial)” ile derleyici bilgilendirilirse uyarı mesajı vermez.

 

Serileştirme İşlemi :

 Konsol Çıktısı :

  •  Bu örnekte ObjectOutputStream sınıfının WriteObject metodu kullanılarak nesneler teker teker yazdırıldı. Duruma göre daha farklı şekilde de yazdırılabilirdi (Örneğin bir List’i direkt olarak WriteObject e parametre olarak vermek gibi.).

  •  ObjectOutputStream sınıfının WriteInt(int) vs gibi de metodları bulunmakta gerektiğinde kullanılmalıdır.
  • Bir başka konu ise “transient” anahtar kelimesidir. Bu anahtar kelimeyle birlikte kullanılan üye alanlar serileştirilmez.

Dosyadan Okuma İşlemi : 

 

Konsol Çıktısı : 

 

  •  Okuma işlemlerinde dikkat edilmesi gereken nokta, okunan nesnenin serileştirilen nesne’nin tipine dönüştülmesi gerekebilir. Çünkü readObject() metodu object döndürmektedir cast(tip dönüşümü) işlemi ile rahatlıkla serileştirilmeden önce kullanılabilen üye alanlara ve metodlara da erişim sağlanır.