Возник такой вопрос. Есть класс
| Код | public class Line implements java.io.Serializable { private Point point1; private Point point2; private int index;
public Line() { System.out.println("Constructing empty line"); }
Line(Point p1, Point p2, int index) { System.out.println("Constructing line: " + index); this.point1 = p1; this.point2 = p2; this.index = index; }
public int getIndex() { return index; }
public void setIndex(int newIndex) { index = newIndex; }
public void printInfo() { System.out.println("Line: " + index); System.out.println("\tObject reference: " + super.toString()); System.out.println("\tfrom point " + point1); System.out.println("\tto point " + point2); } }
|
И мы его сериализуем, а потом восстанавливаем:
| Код | public class SomeReferencesSerialization { public static void main(String[] args) { Point p1 = new Point(1.0, 1.0); Point p2 = new Point(2.0, 2.0); Point p3 = new Point(3.0, 3.0); Line line1 = new Line(p1, p2, 1); Line line2 = new Line(p2, p3, 2); line1.printInfo(); line2.printInfo(); String fileName = "file.bin"; try { FileOutputStream os = new FileOutputStream(fileName); ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(line1); oos.writeObject(line2);
line1.setIndex(11); // #1 line2.setIndex(22); // #2
System.out.println("After changing index"); line1.printInfo(); line2.printInfo(); oos.writeObject(line1); oos.writeObject(line2);
oos.close(); os.close(); System.out.println("Read objects:"); FileInputStream is = new FileInputStream(fileName); ObjectInputStream ois = new ObjectInputStream(is); while (is.available() > 0) { Line line = (Line) ois.readObject(); line.printInfo(); } ois.close(); is.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
|
В результате, несмотря на то, что после строк #1 и #2 значения полей index меняются, после десериализации они вновь равны "1" и "2" для line1 и line2 соответственно (как при изначальном создании инстансов). Вопрос, почему это происходит? |