在java中可以随机访问对象吗?
基本上我有一个字符串对象的文件。我使用Java ObjectOutputStream来存储对象。是否可以随机访问对象(字符串),比如说,如果我想访问第11个对象,我可以以某种方式跳转到该位置,而不必使用readObject()11次循环到该位置。如果我想跳回去,我也可以这样做,不必从头再来。谢谢
正如所建议的,我想我可以用skipBytes()方法实现某种随机访问。虽然我不能保证我的对象是固定大小的,但如果我能在文件中保留这些对象的位置数组,我可以使用该数组作为索引,并使用skipBytes()进行随机访问。所以问题依然存在,不管怎样,我可以在写东西的时候知道物体的大小,这样我就可以以某种方式记录物体的位置了
# 1 楼答案
唯一的方法是将对象分别存储在它们自己的流中,或者存储在同一个文件中,或者存储在不同的文件中
最简单的方法可能是将对象存储在一个列表中,然后一次性读取该列表,然后随机访问该列表
# 2 楼答案
这在
ObjectInputStream
中是不可能的,如果需要随机访问,则需要先将所有对象读入支持随机访问的集合/数组# 3 楼答案
使用
ObjectOutputStream
存储字符串对象完全是过火了。您已经考虑过使用起始位置索引。那么,为什么不直接使用FileOutputStream
将字符串存储到文件中呢?或者使用固定长度编码(其中字节数==字符串长度,可能是*2)将其包装在OutputStringWriter
中,或者对每个字符串单独使用toBytes(encoding)
并记录生成的字节数组的长度