有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用Java将数组数据写入二进制文件

我试图以二进制形式存储以下数组,并在之后将其读回:

private int[10] number;
private String[10] name;
private int[10] age;

将它们存储到二进制文件中,然后再读回的最佳方法是什么?每个数组的示例值如下:

number[0] = 1; name[0] = "Henry"; age[0] = 35;

因此,这些数据属于某种程度上的组合

编辑:基本上我想使用二进制文本文件存储变量(数组)中的数据,二进制是必须的,然后将数据读回。因此,简而言之,我希望有一种存储数据的方法,这样当我关闭应用程序时,数据不会丢失,并且可以在每个会话中检索


共 (1) 个答案

  1. # 1 楼答案

    您可以编写自定义编码器和解码器,例如,使用String.getBytes()String映射到byte[],然后使用OutputStream.write()方法写入每个字节。问题是你所说的“最佳方式”是什么意思,因为:

    1. 您需要支持不同的地区吗?当getBytes()使用平台的默认字符集时,String区域设置是什么
    2. 是否需要压缩二进制数据以节省空间,因为String可能很长或很短
    3. 您是否计划与其他应用程序共享二进制文件?如果是这样,最好使用少数语言支持的格式,例如Google Protobuf

    如果要在应用程序之外读取文件,那么Protobuf似乎是一个明智的选择。然而,对于Hello World应用程序来说,这是一种过分的杀伤力

    最简单的方法是使用ObjectOutputStreamObjectInputStream,但这远远不够漂亮:

    String fileName = "data.set";
    
    try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName))) {
      for (int n : number) {
        out.writeInt(n);
      }
      for (String n : name) {
        out.writeUTF(n);
      }
      for (int a : age) {
        out.writeInt(a);
      }
    }
    
    try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName))) {
      for (int i = 0; i < number.length; i++) {
        number[i] = in.readInt();
      }
      for (int i = 0; i < name.length; i++) {
        name[i] = in.readUTF();
      }
      for (int i = 0; i < age.length; i++) {
        age[i] = in.readInt();
      }
    }