【问题标题】:Object Serialization in Java Behaviour of readObject()Java 中的对象序列化 readObject() 的行为
【发布时间】:2014-12-29 00:04:09
【问题描述】:

假设我有一个 Person 类,我正在使用 ObjectInputStreamObjectOutputStream 以及 FileInputStreamFileOutputStream 来读取对象并将其写入文件。 如果我有各种 Person 类的对象,例如 person1person2person3 我用

writeObject(person1)
writeObject(person2)
writeObject(person3)

当我这样做时

Person p1 = (Person) in.readObject()

p1 会等于 person1 还是 person3?换句话说,readObject 是否遵循堆栈或队列的行为。它是按照写入的顺序读取对象还是按照相反的顺序读取对象?

【问题讨论】:

标签: java object serialization


【解决方案1】:

p1 会等于 person1 还是 person3?换句话说,是否 readObject 遵循堆栈或队列的行为。它是否读取 对象的写入顺序还是读取顺序 倒序?

readObject() 方法从 ObjectInputStream 中读取对象,其顺序与写入流的顺序相同。因此,在您的情况下,p1 将等于 person1。这是一个例子

import java.io.*;


public class Example {

   static class Person implements Serializable {
      String name;

      public Person(String name) {
         this.name = name;
      }

      @Override
      public String toString() {
         return "Person{" +
                 "name='" + name + '\'' +
                 '}';
      }
   }
   public static void main(String[] args) {

      Person person1 = new Person("Adam");
      Person person2 = new Person("John");
      try {

         FileOutputStream out = new FileOutputStream("test.txt");
         ObjectOutputStream oout = new ObjectOutputStream(out);

         oout.writeObject(person1);
         oout.writeObject(person2);
         oout.flush();

         ObjectInputStream ois =
                 new ObjectInputStream(new FileInputStream("test.txt"));

         System.out.println("" +  ois.readObject());
         System.out.println("" +  ois.readObject());


      } catch (Exception ex) {
         ex.printStackTrace();
      }

   }
}

输出

Person{name='Adam'}
Person{name='John'}

对象的写入顺序相同

oout.writeObject(person1);
 oout.writeObject(person2);

【讨论】:

    猜你喜欢
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多