Привет! У меня есть вопрос по Java. Почему модификатор типу transient в примере не обнуляет String a = null.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class SerializeDog implements Serializable {
private String a;
private transient String b;
public SerializeDog(String aa,String bb) {
a = "Not announced as transient : " + aa;
b = "Announced as transient : " + bb;
}
public String toString(){return a + "\n" + b;}
private void writeObject(ObjectOutputStream stream) throws IOException {
stream.defaultWriteObject();
stream.writeObject(b);
}
private void readObject(ObjectInputStream stream) throws IOException,ClassNotFoundException {
stream.defaultReadObject();
b = (String)stream.readObject();
}
public static void main(String[] args) throws IOException,ClassNotFoundException {
SerializeDog sd = new SerializeDog("paper 1", "paper 2");
System.out.println("before : " + sd);
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("File"));
o.writeObject(sd);
ObjectInputStream in = new ObjectInputStream(new FileInputStream("File"));
SerializeDog sd2 = (SerializeDog)in.readObject();
System.out.println("after : " + sd2);
}
}
и результат вот:
before : Not announced as transient : paper 1
Announced as transient : paper 2
after : Not announced as transient : paper 1
Announced as transient : paper 2
Поля, которые помечены ключевым словом transient не сериализуются в том случае, если используеся метод записи по умолчанию. Если мы заглянем в исходный код класса ObjectStreamClass и найдём метод getDefaultSerialFields, который возвращает набор полей класса для сериализации, то увидим, что в нём игнорируются статические поля и поля, помеченные как transient.
Однако вы сами записываете и читаете значение из поля b в собственных реализациях методов writeObject и readObject - в этом случае ключевое слово transient никак не учитывается.
Продвижение своими сайтами как стратегия роста и независимости