基本上我有一个String Objects文件。我使用Java ObjectOutputStream来存储对象。是否可以随机访问对象(字符串),如果我想访问第11个对象,我可以以某种方式跳转到该位置,而不必使用readObject()第11次循环到该位置。如果我想跳回去,我也可以这样做,而不必从头开始循环。谢谢。
正如建议的那样,我想我可以以某种方式使用skipBytes()方法来实现某种随机访问。虽然我无法保证我的对象具有固定大小,但如果我可以在文件中保留这些对象的位置数组,我可以将该数组用作索引并将skipBytes()用于随机访问。所以问题仍然存在,无论如何,当我实际编写对象时,我可以知道对象的大小,以便我能以某种方式记录位置?
答案 0 :(得分:1)
唯一可以做到这一点的方法是将对象分别存储在自己的流中,无论是在同一个文件中还是在不同的文件中。
最简单的做法是将对象存储在List中,然后在一次读取中读取该列表,并随机访问List。
答案 1 :(得分:1)
ObjectInputStream
无法做到这一点,如果您需要随机访问,则需要先将所有对象读入支持随机访问的Collection / array中。
答案 2 :(得分:1)
使用ObjectOutputStream
存储String对象是完全矫枉过正的。您已经考虑过使用起始位置的索引。那么为什么不使用FileOutputStream
将字符串直接存储到文件中 - 使用固定长度编码将其包装在OutputStringWriter
中(其中字节数==字符串长度,可能为* 2) ,或者分别对每个字符串使用toBytes(encoding)
,并记下结果字节数组的长度。
答案 3 :(得分:0)
ObjectOutputStream
本身不能这样做,因为首先它无法知道该文件中对象的大小;实际上,它甚至不知道对象属于同一类型。
如果您确定对象是固定大小的并且您知道该大小,则可以使用skipBytes()
方法 - 但我强烈怀疑您是否真的知道
编辑: 感谢您接受我的回答,但是(只是说清楚):我的意图是根据您提到的要求,显示可以完成的一种方式,但这不是它的所有方式在我看来,>应该完成。 :)