Java Serileştirmesinin Temelleri
Serializable uygulayın, nesneleri ObjectOutputStream ile akışlara yazın ve ardından geri okuyun.
Java Serileştirmesinin Temelleri, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Java Serileştirmesi Nedir
Serileştirme, bir nesnenin durumunu diske kaydedilebilmesi, ağ üzerinden gönderilebilmesi veya bir veritabanında saklanabilmesi için bayt akışına dönüştürür. Serileştirmeden çıkarma işlemi bunun tersidir.
Serializable İşaretleyici Arayüzü
Bir sınıfı serileştirmek için java.io.Serializable uygulayın. Hiçbir yöntemi yoktur — JVM'ye bu sınıfın örneklerinin serileştirilebileceğini bildirir.
import java.io.Serializable;
public class User implements Serializable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
@Override public String toString() { return name + " / " + age; }
}ObjectOutputStream ile Nesne Yazma
Bir FileOutputStream'i ObjectOutputStream içine sarın ve serileştirmek için writeObject() çağrısını yapın.
import java.io.*;
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("user.ser"))) {
oos.writeObject(new User("Alice", 30));
System.out.println("Serialized successfully");
}ObjectInputStream ile Nesne Okuma
Bir FileInputStream'i ObjectInputStream içine sarın ve serileştirmeden çıkarmak için readObject() çağrısını yapın. Sonucu beklenen türe dönüştürün.
import java.io.*;
try (ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("user.ser"))) {
User u = (User) ois.readObject();
System.out.println("Deserialized: " + u);
}Nesne Grafiğini Serileştirme
Serileştirilen nesnenin başvurduğu tüm nesneler de Serializable uygulamalıdır; aksi hâlde çalışma zamanında NotSerializableException fırlatılır.
public class Order implements Serializable {
private User customer; // User must be Serializable
private List<String> items;
public Order(User customer, List<String> items) {
this.customer = customer;
this.items = items;
}
}NotSerializableException
Nesne grafiğindeki herhangi bir alan serileştirilebilir değilse ve transient olarak işaretlenmemişse, Java yazma sırasında NotSerializableException fırlatır.
// Thread is NOT Serializable
public class Task implements Serializable {
private Thread worker; // throws NotSerializableException!
// Fix: mark as transient
private transient Thread worker2;
}Nesne Grafiği ve Paylaşılan Başvurular
Java, serileştirme sırasında nesne kimliğini izler. İki alan aynı nesneye başvuruyorsa yalnızca bir kopya yazılır ve her iki alan da serileştirmeden çıkarılan aynı örneği gösterir.
Koleksiyonları Serileştirme
ArrayList, HashMap ve LinkedList gibi standart koleksiyonlar zaten Serializable uygular; bu nedenle öğeleri de serileştirilebildiği sürece serileştirilebilirler.
List<String> names = new ArrayList<>(List.of("Alice", "Bob"));
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("names.ser"))) {
oos.writeObject(names);
}Kalıtım ve Serileştirme
Bir üst sınıf Serializable uyguluyorsa tüm alt sınıflar da serileştirilebilir olur. Üst sınıf Serializable uygulamıyorsa üst sınıfın alanları kaydedilmez; serileştirmeden çıkarma için üst sınıfın parametresiz bir kurucusu olmalıdır.
Bayt Akışını Doğrulama
Serileştirilmiş bayt akışı, sihirli baytlar olan 0xACED 0x0005 ile başlar. Biçimi anlamak için akışı bir onaltılık düzenleyiciyle inceleyebilir veya SerialVer araçlarıyla çözümleyebilirsiniz.
Güvenlik Uyarısı
Java serileştirmesi bilinen bir saldırı vektörüdür. Güvenilmeyen kaynaklardan gelen verileri doğrulama olmadan asla serileştirmeden çıkarmayın. Harici veriler için JSON, Protobuf veya imzalı veri zarflarını tercih edin.
Hızlı Kontrol
Bir nesneyi akışa hangi yöntem serileştirir?
Özet
Java serileştirmesi ObjectOutputStream / ObjectInputStream kullanır. Sınıflar Serializable uygulamalıdır. Güvenilmeyen verileri serileştirmekten kaçının; yeni kodlarda modern alternatifleri tercih edin.
Sıkça Sorulan Sorular
“Java Serileştirmesinin Temelleri” dersi ücretsiz mi?
Evet — “Java Serileştirmesinin Temelleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Java Serileştirmesinin Temelleri” dersinde ne öğreneceğim?
Serializable uygulayın, nesneleri ObjectOutputStream ile akışlara yazın ve ardından geri okuyun. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Java Serileştirmesinin Temelleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Java Serileştirmesinin Temelleri
- transient Alanları ve serialVersionUID
- Özel Serileştirme: writeObject ve readObject
- Modern Alternatifler: JSON ve Protocol Buffers