-- Java SE

Serialization & Deserialization

Bir nesnenin dosyaya yazılabilmesi için serializable olması gerekir,bunun için de ait olduğu sınıfın java.io.Serializable interface’ni implement etmesi gerekir.

  • Serializable bir sınıfta non-serializable nesneler olabilir,JVM’nin bu nesneleri görmezden gelmesi için transient anahtar kelimesini kullanılır,aksi halde NotSerializableException hatası alınır.Ayrıca static yapılar sınıfa ait olmağı için serializable bir sınıfın içinde olsalar bile serializable değildirler.
public class C implements java.io.Serializable {
private int v1;
private static double v2;
private transient A v3 = new A();
}
class A { } // A serializable değil.

Yukardaki kod parçasında serializable olan tek değişken v1’dir.

  • Eğer ki bir nesne bir object stream’a birden fazla yazılırsa,aynı nesnenin kopyaları birden fazla kez saklanmaz.Bir nesne ilk yazıldığında onun için bir seri numarası oluşturulur,JVM ilk seferde o nesnenin içeriğiyle beraber seri numarasını da yazar,ilk seferden sonra sadece seri numarası saklanır.Nesneler okunurken ise, hafızada sadece bir nesne oluşturulduğu için referanslar aynıdır.

 

  • Bir array’in serializable olması için tüm elemanlarının serializable olması gerekir.Ayrıca bir arrayin tamamı writeObject() metodu ile yazdırılıp,readObject() metodu ile okuabilir.
import java.io.*;

public class ObjectTest {

    public static void main(String args[]) throws ClassNotFoundException,IOException{

        int[] numbers = {1, 2, 3, 4, 5};
        String[] strings = {"Meriç", "BERBER"};

        ObjectOutputStream writer = new ObjectOutputStream(new
                FileOutputStream("array.dat", true));

        writer.writeObject(numbers);
        writer.writeObject(strings);

        writer.close();

        ObjectInputStream reader = new ObjectInputStream(new
                FileInputStream("array.dat"));

        int[] newNumbers = (int[])(reader.readObject());
        String[] newStrings =(String[])(reader.readObject());

        for(int i = 0; i<newNumbers.length; i++){
            System.out.print(newNumbers[i]);
        }

        System.out.println();

        for(int i = 0; i<newStrings.length; i++){
            System.out.print(newStrings[i]+" ");
        }

        reader.close();
    }
}

 

Program çıktısı :

12345
Meriç BERBER

 

 

Yorum bırak

Yorum