Java中的对象序列化readObject()的行为

时间:2014-12-29 00:04:09

标签: java object serialization

假设我有一个Person类,我使用ObjectInputStreamObjectOutputStream使用FileInputStreamFileOutputStream来读取和写入文件对象。 如果我有类Person的各种对象,例如 person1 person2 person3 我用

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

当我这样做时

Person p1 = (Person) in.readObject()

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

1 个答案:

答案 0 :(得分:0)

  

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);