İçindekilerGirişİndex
YukarıİlkÖncekiSonraki YokSon
Geriİleri
Yazdır

Serialization

Serialization Kavramı

Bir nesne herhangi stream'a (örneğin bir file'a ) yazılabilir ve bir stream'den okunabilir. Programın çalışması esnasında hafızada bulunan nesneler program bitince (kapatılınca) yok olur. Ancak serialization tekniğiyle bir nesne diske veya herhangi bir yere kaydedilebilir. Bir program, kapanmadan önce bir dosyayaya sakladığı bir nesneyi daha sonra tekrar çalıştırıldığında dosyadan okuyabilir. Hatta bir programın yazdığı nesneyi aynı dosyadan başka bir program da okuyabilir. Bu şekilde nesnelerin network'te bir yerden diğerine gönderilmesi, veritabanına normal bir veri gibi kaydedilebilmesi mümkün olabilmektedir.

Serializable

Bir class'ın serialization'a tabi tutulabilmesi için bazı koşulları sağlaması gerekir.

1. Class public olmalı.

2. Serializable' interface'ini implement etmeli. Bu interface'de implement edilecek herhangi bir method yoktur. Sadece class'ın serialize edilebilemesine class yazarının izin verdiği anlamına gelir. Bazı classlar güvenlik v.s. nedenlerle buna izin vermek istemeyebilir. Nesnenin içerisindeki bütün veri serializable olmalıdır. Bir tane bile serializable olmayan nesne varsa işlem başarısız olur.

3. Default (parametresiz) bir constructor'ı olmalıdır. Hiç bir constructor yazılmaması durumunda da default contructor'un geçerli olduğu için yine sorun olmaz.

import java.io.*;
public MyClass implements Serializable{
	public MyCLass(){
	}
}

File'e Object Yazma

Hehangi bir class'tan oluşturulmuş bir nesne bir dosyaya ObjectOutputStream class'ı aracılığıyla yazılabilir.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import java.io.*;
  2 public class ObjectStorer{
  3   public static void main(String[] args)
  4     throws IOException
  5   {
  6     String filename="c:\\myfolder\\myobject.ser";
  7     FileOutputStream f=new FileOutputStream(filename);
  8     ObjectOutputStream out=new ObjectOutputStream (f);
  9     Object mine=new Object(); // 
 10     out.writeObject(mine);
 11     out.close();
 12   }
 13 }

File'dan Object Okuma

Daha önce bir dosyaya yazılmış nesne ObjectInputStream kullanılarak okunabilir.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import java.io.*;
  2 public class ObjectLoader{
  3   public static void main(String[] args)
  4     throws Exception
  5   {
  6     String filename="c:\\myfolder\\myobject.ser";
  7     FileInputStream f=new FileInputStream(filename);
  8     ObjectInputStream in=new ObjectInputStream (f);
  9     Object mine=(Object)in.readObject();
 10     in.close();
 11   }
 12 }

Bir dosyaya birden fazla nesne yazılabilir ve okunabilir. Ancak nesnelere hangi sırada yazılmışsa o sırada okunmalıdır.

Bir nesne kaydedilirken içerisindeki bütün veri, alt nesneleri onların içindekiler dahil kaydedilir. Aynı nesneye iki ayrı nesneden referans varsa iki kez kaydedilme durumu oluşabilir.

Class'da değişiklik olursa yazıldığı gibi okunamayacağından sorun çıkar. Bu yüzden class'ın içerisinde

public static final long =1233421421L;

şeklinde bir property konması gerekir. Bu değer JDK ile birlikte gelen "serialver" adlı tool'dan alınabilir.

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonraki YokSon
Geriİleri
Yazdır