Java 如何计算*.ser文件中存储的对象数
我试图读取*.ser文件中存储的所有对象,并将它们存储在对象数组中。如何获取该文件中存储的对象数(以便将数组声明为Java 如何计算*.ser文件中存储的对象数,java,serialization,Java,Serialization,我试图读取*.ser文件中存储的所有对象,并将它们存储在对象数组中。如何获取该文件中存储的对象数(以便将数组声明为number\u of\u objectslong) 我已经检查了API,找不到理想的函数 -编辑- 守则的一部分: Ser[] objTest2 = new Ser[number_of_objects]; for(int i=0; i<=number_of_objects, i++) { objTest2[i] = (Ser)testOS2.readObject();
number\u of\u objects
long)
我已经检查了API,找不到理想的函数
-编辑-守则的一部分:
Ser[] objTest2 = new Ser[number_of_objects];
for(int i=0; i<=number_of_objects, i++) {
objTest2[i] = (Ser)testOS2.readObject();
objTest2[i].printIt();
}
Ser[]objTest2=新的Ser[对象的数量];
对于(inti=0;i您想要查看的是类
它基本上是一个动态增长的阵列
您可以向其中添加项目,如下所示:
ArrayList list = new ArrayList();
list.add(someObject);
list.add(anotherBoject);
当你向列表中添加新项目时,列表将不断增长。因此,你不必提前知道列表的大小
如果需要从列表的末尾取出一个数组,可以使用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);
}
List objTest2=new ArrayList();
而(testOS2.available>0){
Ser toAdd=((Ser)testOS2.readObject());
toAdd.printIt();
目标测试2.添加(toAdd);
}
*我不认为available()
是一个可靠的测试,可以测试是否有更多的字节需要读取。只要一直读取对象,直到得到EOFEException。这就是它的用途。使用列表而不是数组,这样你就不需要提前计数。一个存储序列化对象的文件(我不知道正确的术语,这是我学习java的第一周)。好的,您需要确定的是列表
接口。具体实现将是ArrayList
。由于您不知道文件中的任何对象,该代码将无法工作。当流中还有对象时,您需要一些while循环来继续读取。并且,在读取时,继续添加每个新对象o列表。我不认为我需要它。这是代码的一部分。-已编辑-在主帖子中添加了代码。@moonstruckhoros您确实需要它(但添加了泛型)。您需要反序列化流以找到(顶级)对象的数量(除非您将该信息存储在前面的某个位置)/通常,应避免使用引用数组-使用List
。available()
在任何方面都不是对文件结尾的测试。请参阅Javadoc。正确的检测方法是捕获EOFException
,EOFException
应该单独捕获,而不是像这样检测。仅仅代码不是答案:您必须解释。
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();
}
}
}