如何计算存储在* .ser文件中的对象数

时间:2010-07-13 13:33:31

标签: java serialization

我正在尝试读取存储在* .ser文件中的所有对象,并将它们存储在一个对象数组中。如何获取存储在该文件中的对象数量(这样我可以将数组声明为number_of_objects长)?

我检查了API,但无法找到理想的功能。

CNC中
部分代码:

Ser[] objTest2 = new Ser[number_of_objects];
for(int i=0; i<=number_of_objects, i++) {
    objTest2[i] = (Ser)testOS2.readObject();
    objTest2[i].printIt(); 
}

3 个答案:

答案 0 :(得分:3)

您要查看的是ArrayList类。

它基本上是一个动态增长的数组。

您可以像这样添加项目:

ArrayList list = new ArrayList();
list.add(someObject);
list.add(anotherBoject);

当您向其添加新项目时,列表将会增长。所以你不必提前知道尺寸。

如果你需要在最后的List中输出一个数组,你可以使用List的toArray()方法。

Object[] arr = list.toArray(new Object[list.size()]);

修改
以下是您需要的一般实现:

List<Ser> objTest2 = new ArrayList<Ser>();
while (testOS2.available > 0) {
    Ser toAdd = ((Ser)testOS2.readObject());
    toAdd.printIt(); 
    objTest2.add(toAdd);
}

*我不认为available()是否可以测试是否有更多字节要读。

答案 1 :(得分:-1)

只要继续读取对象,直到获得EOFException。这就是它的用途。并使用List而不是数组,因此您不需要提前计算。

答案 2 :(得分:-1)

  while(true)
 {

      try
      {
      Employee e=(Employee) ois.readObject();
      System.out.println("successfully deserialized.........showing details of object.");
      e.display();
      }

      catch(Exception e)
      {
          if(e instanceof java.io.EOFException)
          {
          System.out.println("All objects read and displayed");
          break;
          }
          else
          {
              System.out.println("Some Exception Occured.");
              e.printStackTrace();

          }
        }
 }