我正处于Java项目的中间,我需要做的一件事就是从磁盘写入和读取对象。具体来说,我需要编写并稍后从单个RandomAccessFile
加载给定对象的数据成员,每个对象具有固定大小的记录。此文件表示具有固定大小磁盘块的分区。
现在我所做的是使用ByteBuffer
将每个数据成员显式转换为字节。然后我将这些文件写入文件,允许稍后重新加载数据以实例化具有相同数据成员值的新对象。我不喜欢这种方法的事情是每个数据成员必须被显式转换并放入ByteBuffer
然后写入。加载恰好相反,将所有字节转换回来并将它们存储在适当类型的对象中。
我上面使用的方法似乎过于复杂。有更好的方法,更简单的方法吗?我在想的是类似于你在C ++中所做的事情。在过去,我使用指向对象的指针很容易地从固定大小的索引记录中存储和重新加载对象数据,然后在转换指针后用ofstream
(或类似的)从那里写入所有字节使用const char *
到reinterpret_cast
。使用ifstream
(或类似)加载文件同样简单,只需使用索引* sizeOf(Foo)
计算文件指针偏移量,然后在从文件读入内存之前进行搜索。
在Java中是否有类似于这种方法的东西?
答案 0 :(得分:0)
听起来你正在寻找的是ObjectOutputStream,它允许你将任意(但必须实现Serializable
)对象序列化为字节数组(或者在本例中为流),然后可以被写入磁盘。这本身不会支持您的随机访问需求,但它将是解决方案的一个很好的部分,不需要自定义适配器。