Sobes.tech
Junior

Чӣ тавр майдонҳоро аз сериализатсия дар Java хориҷ кардан мумкин аст?

sobes.tech AI

Ҷавоб аз AI

Барои хориҷ кардани майдонҳо аз сериализатсия чанд роҳ вуҷуд дорад:

  1. Истифодаи калимаи калидии transient: Самти содда ва маъмултарин. Майдони нишондодашуда бо ин тағирёбанда аз механизми стандартии сериализатсияи Java нодида гирифта мешавад.

    public class MyClass implements java.io.Serializable {
        private String essentialField;
        private transient String secretField; // Ин майдон сериализатсия намешавад
    
        public MyClass(String essentialField, String secretField) {
            this.essentialField = essentialField;
            this.secretField = secretField;
        }
    
        // Геттерҳо ва сеттерҳо
    }
    
  2. Барқарор кардани методҳои writeObject ва readObject: Имкон медиҳад, ки назорати пурра дар равандҳои сериализатсия ва десериализатсия, муайян кардани кадом майдонҳоро нигоҳ медоранд (writeObject) ва барқарор мекунанд (readObject).

    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; // Ин майдонро мехоҳем хориҷ кунем
    
        public MyClass(String fieldToSerialize, String fieldToExclude) {
            this.fieldToSerialize = fieldToSerialize;
            this.fieldToExclude = fieldToExclude;
        }
    
        private void writeObject(ObjectOutputStream out) throws IOException {
            // Фақат майдонҳои заруриро сериализатсия мекунем
            out.defaultWriteObject(); // Майдонҳои не-transient, ки хориҷ нашудаанд, сериализатсия мекунад
            // Агар майдонҳое бо `transient` нишон дода шудаанд, аммо бояд сериализатсия шаванд,
            // ё майдонҳое, ки бояд бо усули махсус сериализатсия шаванд, онҳоро дар ин ҷо метавон сериализатсия кард
        }
    
        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
            // Фақат майдонҳои заруриро десериализатсия мекунем
            in.defaultReadObject(); // Майдонҳои не-transient, ки хориҷ нашудаанд, десериализатсия мекунад
            // Агар майдонҳое бо `transient` нишон дода шудаанд, аммо бояд десериализатсия шаванд,
            // онҳоро дар ин ҷо метавон десериализатсия кард
        }
    
        // Геттерҳо ва сеттерҳо
    }
    
  3. Истифодаи интерфейси Externalizable: Пурра назоратро дар сериализатсия таъмин мекунад, талаб мекунад, ки методҳои writeExternal ва readExternal иҷро шаванд. Ин роҳи бештар флексибл аст, аммо бештар кори дастӣ талаб мекунад.

    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; // Ин майдонро мехоҳем хориҷ кунем
    
        // Конструктори умумӣ ва бе аргументҳо барои Externalizable зарур аст
        public MyClass() {
        }
    
        public MyClass(String fieldToSerialize, String fieldToExclude) {
            this.fieldToSerialize = fieldToSerialize;
            this.fieldToExclude = fieldToExclude;
        }
    
        @Override
        public void writeExternal(ObjectOutput out) throws IOException {
            // Мушаххас мекунем, ки чӣ сериализатсия мешавад
            out.writeObject(fieldToSerialize);
            // fieldToExclude сериализатсия намешавад
        }
    
        @Override
        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
            // Мушаххас мекунем, ки чӣ десериализатсия мешавад
            fieldToSerialize = (String) in.readObject();
            // fieldToExclude десериализатсия намешавад
        }
    
        // Геттерҳо ва сеттерҳо
    }
    

Интихоби метод вобаста ба вазифаи мушаххас ва сатҳи назорат дар равандҳои сериализатсия мебошад. Барои аксар ҳолатҳо, истифодаи transient соддатар аст.