0

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

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

4

4 回答 4

1

您可以做到这一点的唯一方法是将对象分别存储在它们自己的流中,无论是在同一个文件中还是在不同的文件中。

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

于 2011-05-13T14:11:05.437 回答
1

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

于 2011-05-13T14:12:06.377 回答
1

ObjectOutputStream用于存储 String 对象完全是矫枉过正。您已经考虑过使用起始位置的索引。那么为什么不直接使用 a 将字符串直接存储到文件中FileOutputStream- 或者OutputStringWriter使用固定长度编码(其中字节数 == 字符串长度,可能 *2)将其包装,或者toBytes(encoding)单独使用每个字符串并注意结果字节数组的长度。

于 2011-05-13T14:54:32.617 回答
0

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

如果确定对象是固定大小的并且您知道该大小,则可以使用该skipBytes()方法——但我强烈怀疑您是否真的知道这一点。


编辑:感谢您接受我的回答,但是(只是把事情说清楚):我的意图是根据您提到的要求展示一种可以做到这一点的方式,但在我看来,这根本不是应该做到的方式. :)

于 2011-05-13T14:14:55.637 回答