从二进制文件中读取时,我需要获取当前的文件指针位置(以字节为单位)。我使用 编写文件ObjectOutputStream
,现在我需要读取它并记住每个对象的字节位置。
但是:ObjectInputStream
不提供读取指针位置的方法,并且RandomAccessFile
无法读取对象:(
如果您认为有办法,甚至是解决方法,这些额外信息可能会有所帮助:
我已将 ID 存储在我的文件中。每个 ID 至少列出一个节点(可以是多个节点)。全部作为长值。
例如:
ID Node Node ...
123151824812 12419512 1248129412 124912 5992039 1924823590
5238952323942 283492384 234892348 234908234 2348902348 5902303 239235523
...
每个 ID 都是一个单独的对象,它将 id 值本身存储为 long 值,节点存储为ArrayList<Long>
.
第二个文件存储节点并列出每个节点的父 ID。像这样:
Node ID ID ...
12419512 123151824812
234892348 5238952323942 27834918128911
...
背后的想法是:每当我知道一个 ID 并想知道有关节点的信息时,我都会查看哪个节点位于节点文件中的特定位置。每当我知道节点并想进一步了解其父 ID 时,我都会查看 ID 文件中的具体位置。
然而,目前我只是将 ID 和节点值本身写入文件中,使用它们作为“索引”。
如果那是我要查找的 ID,我不想逐行查看,因为这些文件可能会变得非常大(GB 大小)。如果我记住另一个文件的字节位置而不是行索引左右会更容易,因为我可以使用 skip() 或类似方法简单地跳转到它。
结论:如何在读取时从下一个对象的开头获取文件指针位置(以字节为单位)ObjectInputStream
?