我正在尝试读取存储在* .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();
}
答案 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();
}
}
}