Java'da alanları nasıl serileştirmeden çıkarırsınız?
sobes.tech yapay zeka
AI'dan gelen yanıt
Serileştirmeden alanları hariç tutmanın birkaç yolu vardır:
-
Anahtar kelime
transientkullanımı: En basit ve yaygın yöntemdir. Bu modifiyer ile işaretlenmiş alan, Java'nın standart serileştirme mekanizması tarafından göz ardı edilir.public class MyClass implements java.io.Serializable { private String essentialField; private transient String secretField; // Bu alan serileştirilmeyecek public MyClass(String essentialField, String secretField) { this.essentialField = essentialField; this.secretField = secretField; } // Getter ve Setter'lar } -
writeObjectvereadObjectmetodlarının üzerine yazma: Serileştirme ve deseralizasyon sürecini tamamen kontrol etmenizi sağlar, hangi alanların kaydedileceğini (writeObjectiçinde) ve geri yükleneceğini (readObjectiçinde) belirler.import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class MyClass implements Serializable { private String fieldToSerialize; private String fieldToExclude; // Bu alan hariç tutulmak isteniyor public MyClass(String fieldToSerialize, String fieldToExclude) { this.fieldToSerialize = fieldToSerialize; this.fieldToExclude = fieldToExclude; } private void writeObject(ObjectOutputStream out) throws IOException { // Sadece gerekli alanları serileştir out.defaultWriteObject(); // Transient olmayan ve manuel olarak hariç tutulmayan alanları serileştirir // Eğer transient olarak işaretlenmiş ama serileştirilmesi gereken alanlar varsa, // veya özel şekilde serileştirilmesi gereken alanlar varsa, // bunlar burada manuel olarak serileştirilebilir } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { // Sadece gerekli alanları deseralize et in.defaultReadObject(); // Transient olmayan ve manuel olarak hariç tutulmayan alanları deseralize eder // Eğer transient olarak işaretlenmiş ama deseralize edilmesi gereken alanlar varsa, // bunlar burada manuel olarak deseralize edilebilir } // Getter ve Setter'lar } -
Externalizablearayüzünün kullanımı: Serileştirme üzerinde tam kontrol sağlar,writeExternalvereadExternalmetodlarının uygulanmasını gerektirir. Bu,Serializable'den daha esnek bir yaklaşımdır, ancak daha fazla manuel yönetim gerektirir.import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; public class MyClass implements Externalizable { private String fieldToSerialize; private String fieldToExclude; // Bu alan hariç tutulmak isteniyor // Externalizable için parametresiz public yapıcı zorunludur public MyClass() { } public MyClass(String fieldToSerialize, String fieldToExclude) { this.fieldToSerialize = fieldToSerialize; this.fieldToExclude = fieldToExclude; } @Override public void writeExternal(ObjectOutput out) throws IOException { // Açıkça serileştirilecek alanları belirtiyoruz out.writeObject(fieldToSerialize); // fieldToExclude serileştirilmez } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { // Açıkça deseralize edilecek alanları belirtiyoruz fieldToSerialize = (String) in.readObject(); // fieldToExclude deseralize edilmez } // Getter ve Setter'lar }
Hangi yöntemin kullanılacağı, görevin özel gereksinimlerine ve serileştirme süreci üzerindeki kontrol seviyesine bağlıdır. Çoğu durumda, transient kullanımı en basit yoldur.