Java ObjectOutputStream: Nesneleri Dosyaya Yazma ve Serileştirme 💾
🚀 Bu Rehberde Ne Öğreneceksiniz?
Bu rehberde, Java ObjectOutputStream sınıfını kullanarak nesneleri nasıl serileştireceğinizi (serialize) ve dosyaya yazacağınızı öğreneceksiniz.
Ayrıca Serializable arayüzü, transient anahtar kelimesi ve serialVersionUID kavramlarını da gerçek bir örnek üzerinden inceleyeceğiz.
🧠 Teknik Özet
Konu: Java'da nesne serileştirme (serialization).
Amaç: Bellekteki canlı nesneleri kalıcı bir ortama (dosya, veritabanı vb.) yazmak veya ağ üzerinden iletmek.
Kullanım Alanı: Veri saklama, yedekleme, ağ iletimi, kurumsal uygulamalarda veri transferi.
⚙️ ObjectOutputStream Nedir?
ObjectOutputStream, bir Java nesnesini bayt akışına dönüştürür. Bu işleme serileştirme (serialization) denir.
Serileştirilen nesne daha sonra dosyaya yazılabilir veya ağ üzerinden gönderilebilir.
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("CalisanObjesi.ser"));
🧩 Bu satır, nesneleri dosyaya yazmak için bir ObjectOutputStream oluşturur.
🧩 ObjectOutputStream Gereksinimleri Serileştirilecek sınıfın java.io.Serializable arayüzünü uygulaması gerekir. Bu arayüz bir işaretleyici (marker interface)’dir, yani herhangi bir metot içermez.
Eğer sınıf Serializable değilse:
java.io.NotSerializableException: rabisu.cloud.veri.Calisan
hatası alınır.
✍️ Adım Adım: Nesneyi Dosyaya Yazma
1️⃣ Serileştirilebilir Sınıf Oluşturma
package rabisu.cloud.veri;
import java.io.Serializable;
public class Calisan implements Serializable {
private static final long serialVersionUID = -299482035708790407L;
private String ad;
private String cinsiyet;
private int yas;
private String pozisyon;
public Calisan(String ad) { this.ad = ad; }
@Override
public String toString() {
return "Calisan:: Ad=" + ad + " Yas=" + yas +
" Cinsiyet=" + cinsiyet + " Pozisyon=" + pozisyon;
}
}
💡 Bu sınıf serileştirilebilir hale getirilmiştir ve serialVersionUID sürüm uyumu sağlar.
2️⃣ Nesneyi Dosyaya Yazma (Serialization)
package rabisu.cloud.veri;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class ObjectOutputStreamOrnek {
public static void main(String[] args) {
Calisan calisan = new Calisan("Aylin Yılmaz");
calisan.setYas(28);
calisan.setCinsiyet("Kadın");
calisan.setPozisyon("Proje Yöneticisi");
try (
FileOutputStream dosya = new FileOutputStream("CalisanObjesi.ser");
ObjectOutputStream nesneAkisi = new ObjectOutputStream(dosya);
) {
nesneAkisi.writeObject(calisan);
System.out.println("✅ Serileştirme işlemi tamamlandı!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
🧠 Bu kod, Calisan nesnesini bayt dizisine çevirip “CalisanObjesi.ser” dosyasına yazar.
3️⃣ Transient Anahtar Kelimesi
Bazı alanların serileştirilmesini istemiyorsanız, transient kullanabilirsiniz.
private transient String pozisyon;
💡 Bu alan, serileştirme sırasında göz ardı edilir.
4️⃣ serialVersionUID Önemi
serialVersionUID, serileştirme ve ters serileştirme işlemleri sırasında sınıf sürüm uyumluluğunu sağlar. Eğer bu alan yoksa ve sınıfta değişiklik yaparsanız, eski dosyalar okunamayabilir.
💬 Sıkça Sorulan Sorular (SSS)
- Serileştirme sonrası dosya neden okunamıyor?
Çünkü dosya insan tarafından okunabilir değildir. İçerik binary formatındadır. Okumak için ObjectInputStream ile ters serileştirme yapılmalıdır.
- Serializable arayüzü neden zorunlu?
Bu arayüz JVM'e “Bu nesne serileştirilebilir” bilgisini verir. Bir güvenlik işaretidir.
- Statik (static) değişkenler serileştirilir mi?
Hayır. Statik alanlar sınıfa aittir, nesneye değil. Bu yüzden kaydedilmez.
- Transient ne işe yarar?
Serileştirme sırasında belirli alanların yazılmasını engeller.
- Nesneyi nasıl geri okurum?
ObjectInputStream kullanarak readObject() metoduyla okursun ve tür dönüşümü yaparsın.
🧩 ObjectOutputStream Metot Özeti
| 🧩 Metot | 💡 Açıklama |
|---|---|
| writeObject(Object o) | Nesneyi serileştirip akışa yazar. |
| flush() | Akışı temizler ve yazmayı zorlar. |
| close() | Akışı kapatır. |
| reset() | Serileştirme durumunu sıfırlar. |
🏁 Sonuç
Java ObjectOutputStream, nesneleri kalıcı hale getirmenin güvenli ve standart yoludur. Serileştirme işlemi, özellikle veri aktarımı, dosya kaydı ve kurumsal uygulamalarda kritik öneme sahiptir.
☁️ Bu özelliği, Rabisu Bulut üzerinde geliştirdiğiniz uygulamalarda güvenli veri aktarımı için hemen deneyebilirsiniz.
yaml