Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算*.ser文件中存储的对象数_Java_Serialization - Fatal编程技术网

Java 如何计算*.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();

我试图读取*.ser文件中存储的所有对象,并将它们存储在对象数组中。如何获取该文件中存储的对象数(以便将数组声明为
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();

          }
        }
 }