Sobes.tech
Junior

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:

  1. Anahtar kelime transient kullanı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
    }
    
  2. writeObject ve readObject metodlarının üzerine yazma: Serileştirme ve deseralizasyon sürecini tamamen kontrol etmenizi sağlar, hangi alanların kaydedileceğini (writeObject içinde) ve geri yükleneceğini (readObject iç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
    }
    
  3. Externalizable arayüzünün kullanımı: Serileştirme üzerinde tam kontrol sağlar, writeExternal ve readExternal metodları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.