基本上我有一个字符串对象的文件。我用了Java ObjectOutputStream 来存储所述对象。是否有可能随机访问对象(字符串),比如如果我想访问第11个对象,我可以以某种方式跳转到该位置,而不必使用 阅读对象() 第11次循环到那个位置。如果我想跳回来,我也可以这样做,而不必从头开始循环。谢谢.

正如建议的那样,我想我可以以某种方式使用skipBytes()方法来实现某种随机访问。虽然我不能保证我的对象是固定大小的,但是如果我可以在文件中保留这些对象的位置数组,我可以只使用该数组作为索引和skipBytes()来随机访问。所以问题仍然存在,无论如何,当我实际编写它们时,我可以知道对象的大小,以便我可以以某种方式记录位置?

有帮助吗?

解决方案

ObjectOutputStream本身不能做到这一点,因为首先它无法知道该文件中对象的大小;实际上,它甚至无法知道对象是相同类型的。

如果为您知道对象是固定的大小,并且您知道大小,您可以使用skipBytes()方法 - 但我强烈怀疑您真的知道。


编辑: 谢谢你接受我的答案,但(只是让事情清楚):我的意图是为了展示这种方式,这可以赋予你所提到的要求,但这完全不是它应该在我看来完成。:)

其他提示

您可以执行此操作的唯一方法是在同一文件中或在不同文件中单独存储对象。

最简单的事情可能是将对象存储在列表中,然后在一个读取中读取该列表,随机访问列表。

如果需要随机访问,则不可能将所有对象读取为首先支持随机访问的集合/数组。

使用 ObjectOutputStream 存储字符串对象是完全矫枉过正。你已经想过使用起始位置的索引。那么为什么不直接将字符串存储到文件中呢? FileOutputStream -要么把它包在一个 OutputStringWriter 使用固定长度编码(其中字节数==字符串长度,可能为*2),或使用 toBytes(encoding) 在每个字符串上分别注意生成的字节数组的长度。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top