java - 我应该如何将 POJO 表示写入 RandomAccessFile?

标签 java randomaccessfile

我有一个 POJO,它有许多 String 字段。我想将此对象的实例(按自然顺序排序)写入 RandomAccessFile,然后最终在该文件中搜索我需要的对象。

问题是我不太确定如何解决这个问题 - 例如,在纯文本文件中我会用新行来分隔新的对象实例。使用 RandomAccessFile 我应该使用对象的字节大小来指示文件中的新对象 - 如果我知道我想要第二个对象,我会查看 2 个对象的字节值文件?

我遵循了将排序的 integers 写入文件的教程 - 如果我想找到第二个出现的地方,我会在文件中查找 8 个字节。我是否应该对我的 POJO 应用相同的逻辑 - 或者我是否可以使用 new line 进行分隔?

编辑*这些是我对象的字段:

import java.io.FileWriter;
import java.io.IOException;
import java.io.Serializable;

/**
 * A RegradeRule is an individual rule found in the Regrade .dat file (one
 * line).
 * 
 * @author E Rowlands
 */
public class RegradeRule implements Serializable,  Comparable<RegradeRule> { 

    private String privateData;
    private String privateData;
    private String privateData;
    private String privateData;
    private String privateData;
    private String privateData;
    private String privateData;
    private String privateData;
    private String privateData;
    private String privateData;
    private String privateData;
    private String privateData;

    // getters & setters
}

最佳答案

你有几种通用的方法来实现这个:

  • 使用固定长度的字符串 - 确定您的字符串具有特定的最大长度,并用一些未使用的字符(例如,零)填充您写入该长度的所有字符串。如果要允许超过 127 的 Unicode 代码点,则需要处理字符串的编码。
  • 在文件顶部或单独的文件中写入索引 - 在文件顶部添加单独的数据 block 以帮助您导航到正确的项目。这种方法很难将文件增长到超过某个限制,因为内容需要被复制或读入内存以进行扩展。
  • 如果您总是一次获取整个文件,请不要使用 RandomAccessFile - 这是最简单的实现方法,您将获得一个人类可查看/可编辑的文本文件.这种方法的缺点是您无法在不阅读其余项目的情况下导航至特定项目。

关于java - 我应该如何将 POJO 表示写入 RandomAccessFile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50907720/

相关文章:

java - Jframe 上的 Slideshare 演示

java - mappingsize 或 limit 如何影响 MappedByteBuffer 性能?

Java:尝试将大于 127 的字节添加到 ByteBuffer

java - 位移动 RandomAccessFile

java - TreeMap 作为泛型类

java - Unity 广告返回 INVALID_ARGUMENT

java - 使用字节数组创建新字符串会产生奇怪的结果

java - 在Java中写入随机访问文件而不覆盖

java - Android Studio 删除 Reyclerview 和 Sqlitedb 中的所有行

java - 如何从项目中删除jar文件?