【问题标题】:Java - How do you read binary objects into an object array without knowing the size?Java - 如何在不知道大小的情况下将二进制对象读入对象数组?
【发布时间】:2010-03-01 01:40:02
【问题描述】:

Java - 如何在事先不知道大小的情况下将二进制对象读入对象数组?例如,我不知道二进制文件中有多少“客户端”,那么如何在事先不知道大小的情况下将它们读入数组?我知道我可能可以使用向量,但我必须使用数组。

【问题讨论】:

  • hmm...我一直在考虑这个问题,但是将文件的总大小除以对象的大小是否可以得出文件中对象的数量?
  • 为什么“必须”?这是作业吗?
  • 好吧,我不必使用数组。我可以并且知道如何使用向量,我只想知道如何使用未知大小的数组。
  • 感谢您的回答。我才意识到我真的不需要知道大小。嗬!前任。 objArray = ( SomeClass[] )inputStream.readObject();
  • 哦,亲爱的,我想知道那是不是在底部。

标签: arrays object


【解决方案1】:

当你创建一个 ArrayList 时,它会创建一个保留大小的 T[]。

当你添加太多项时,它会创建一个新的、更大的 T[] 并使用 System.arraycopy 来移动内容。

对于无限数量的可能输入,这是您能做的最好的。您甚至可以阅读 ArrayList 的源代码来观察它的完成情况。

当您可以保证最大可能尺寸时,即使您不知道实际尺寸是多少,也适用另一种可能的解决方案。你做一个最大的数组,把东西放进去。完成后,创建实际大小的最终数组,然后复制。

【讨论】:

    【解决方案2】:

    您可以在空间不足时创建一个新数组,然后使用arraycopy 将旧元素复制到新元素。

    【讨论】:

      【解决方案3】:

      使用集合库中的内容,例如向量或 ArrayList。

      【讨论】:

      • 我的答案和被投的差不多,为什么我被投了反对票?
      • bmargulies 不推荐 /using/ ArrayList。他解释了内部实现,以便 OP 可以复制它。
      • 这如何等同于我需要阅读问题?同样很清楚的是,虽然 bmargulies 解释了 ArrayLists 的工作原理,但他也提倡使用它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 2022-01-15
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多