Bu yazıda Java Serialization, yani serileştirme konusundan bahsedeceğim.
Java bilindiği üzere nesneye dayalı bir dil. Neredeyse her şey nesne. Nesneleri kullanırken bir defa değil istenilen zamanda ve yerde tekrar, tekrar ve tekrar kullanabilmemiz gerekebiliyor. Bu noktada ise bizim “serileştirme” dediğimiz yapı devreye giriyor.
Yukarıdaki cümlede kalın olarak belirttiğim “istenilen yerde” cümlesine dikkatinizi çekmek istiyorum. Değişkenlere ait değerleri bir dosyaya kaydetdiğinizi düşünün. Tekrar kullanmak istediğinizde bu değerlerin ne ve hangi tipte olduğunu bilemeyiz. Nesnelerimizin içinde bulunan değerler ve ve veri tipleri ile birlikte saklayabiliyoruz. Bu güzel yöntem “Java Serileştirme” sayesinde olmaktadır.
Nesnelerin içerisindeki değişkenlerin adları, tipleri değeleri byte’lara çevrilerek kaydedilir ve bu dosyayı nereye götürürsek götürelim JVM bu değerleri bir kayıp olmadan okuyup kullanabiliriz. Serileştirme işlemi için Java’nın Serializable sınıfını kullanıyoruz.
Serileştirmeyi bir örnek yaparak pekiştirelim. Kişi bilgilerinin kaydedildiği bir sınıfımız olucak bu bilgileri bir dosyaya kaydedip tekrar okuyacağız ve kişi bilgilerinin değerlerinde ve tiplerinde bir farklılık olmadığını kaydederken nasılsa öyle kaldığını göreceğiz.
import java.io.Serializable; public class Kisi implements Serializable { private String ad; private String soyad; // public Kisi(){ } public Kisi(String ad, String soyad){ this.ad = ad; this.soyad = soyad; } public String getAd() { returnad; } publicvoid setAd(String ad) { this.ad = ad; } public String getSoyad() { returnsoyad; } publicvoid setSoyad(String soyad) { this.soyad = soyad; } public String toString(){ return "Ad : " + this.ad + "\nSoyad : " + this.soyad; } }
Şimdi ise kişi bilgilerini dosyaya kaydedelim.
public static void Yaz(){ try{ Kisi kisi = new Kisi("Burak", "Kutbay"); FileOutputStream dosya = new FileOutputStream("C:\\metin.txt"); ObjectOutputStream yaz = new ObjectOutputStream(dosya); yaz.writeObject(kisi); yaz.close(); } catch(Exception e){ System.out.println(e.getMessages()); } }
metin.txt dosyasına bu bilgileri kaydettik. Şimdi bu dosyadan kaydettiğimiz verileri okuyacağız.
public static void Oku(){ try{ FileInputStream dosya = new FileInputStream("C:\\metin.txt"); ObjectInputStream oku = new ObjectInputStream(dosya); Kisi kisi = (Kisi)oku.readObject(); System.out.println(kisi.toString()); oku.close(); } catch(Exception e){ System.out.println(e.hetMessages()); } }
Dosyadaki bilgileri okuduk. Sonuç ise;
Ad: Burak Soyad: Kutbay
şeklinde oldu.
Serileştirme işlemi sayesinde dosyadaki verilerin tipleri korunduğu için JVM bunu anlayarak başka bir işlem yapmadan gerekli olan değerleri değişkenlerine atadı ve sonucu bu Ad, Soyad şeklinde gösterdi.
Bol kodlu günler.
güzel yazı olmuş, eline sağlık
peki serileştirme yaparken
atıyorum .txt dosyası başkasının eline geçti byte koddan open source kodu okurmu bilemem class adını doğru yazdı diyelim içindeki nesneyi okudu değişken private final olursa set yapamayacağı için değiştiremez ama yeni nesne oluşturabilir. Aynı class yapısana uygun başka class yaratırsa . Orjinal kodda benim kaydettiğim class olarak okursam değişiğ değişmediği nasıl anlaşılır ?