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