Java-da sahələri serializasiyadan necə çıxarmaq olar?
sobes.tech Süni İntellekt
AI-dan cavab
Serializasiya zamanı sahələri istisna etmək üçün bir neçə üsul mövcuddur:
-
transientaçar sözündən istifadə: Ən sadə və yaygın üsul. Bu modifikator ilə işarələnmiş sahə Java-nın standart serializasiya mexanizmi tərəfindən nəzərə alınmır.public class MyClass implements java.io.Serializable { private String essentialField; private transient String secretField; // Bu sahə serializasiya olunmayacaq public MyClass(String essentialField, String secretField) { this.essentialField = essentialField; this.secretField = secretField; } // Getter və setterlər } -
writeObjectvəreadObjectmetodlarının override edilməsi: Serializasiya və deserializasiya prosesinə tam nəzarət imkanı verir, hansı sahələrin saxlanacağını (writeObjectdə) və bərpa olunacağını (readObjectdə) müəyyən edir.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 sahəni istisna etmək istəyirik public MyClass(String fieldToSerialize, String fieldToExclude) { this.fieldToSerialize = fieldToSerialize; this.fieldToExclude = fieldToExclude; } private void writeObject(ObjectOutputStream out) throws IOException { // Yalnız lazım olan sahələri serializasiya edirik out.defaultWriteObject(); // Transient olmayan, əl ilə istisna edilməmiş sahələri serializasiya edir // Əgər transient kimi işarələnmiş, lakin serializasiya olunmalı sahələr varsa, // və ya xüsusi serializasiya tələb edən sahələr varsa, onları burada serializasiya etmək olar } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { // Yalnız lazım olan sahələri deserializasiya edirik in.defaultReadObject(); // Transient olmayan, əl ilə istisna edilməmiş sahələri deserializasiya edir // Əgər transient kimi işarələnmiş, lakin deserializasiya olunmalı sahələr varsa, // onları burada deserializasiya etmək olar } // Getter və setterlər } -
Externalizableinterfeysindən istifadə: Serializasiya üzərində tam nəzarət imkanı verir vəwriteExternalvəreadExternalmetodlarının implementasiyasını tələb edir. Bu,Serializable-dən daha çevik yanaşmadır, lakin daha çox əl əməyini tələb edir.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 sahəni istisna etmək istəyirik // Externalizable üçün açıq və ictimai konstruktor vacibdir public MyClass() { } public MyClass(String fieldToSerialize, String fieldToExclude) { this.fieldToSerialize = fieldToSerialize; this.fieldToExclude = fieldToExclude; } @Override public void writeExternal(ObjectOutput out) throws IOException { // Aydın şəkildə serializasiya edirik out.writeObject(fieldToSerialize); // fieldToExclude serializasiya edilmir } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { // Aydın şəkildə deserializasiya edirik fieldToSerialize = (String) in.readObject(); // fieldToExclude deserializasiya edilmir } // Getter və setterlər }
Seçim konkret tapşırıq və serializasiya prosesinə nəzarət səviyyəsindən asılıdır. Ən sadə üsul transient istifadə etməkdir.