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

时间:2018-03-12 18:20:40

标签: java arrays binary save

我试图将以下数组存储在二进制文件中,然后在以下内容中读取它们:

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

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

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

所以数据属于一起。

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

1 个答案:

答案 0 :(得分:0)

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

  1. 您需要支持不同的区域设置吗? String语言环境是什么getBytes()使用平台的默认字符集。
  2. 您是否需要压缩二进制数据以节省空间,因为String可能很长或很短。
  3. 您打算与其他应用程序共享二进制文件吗?如果是这样,最好使用少数语言支持的格式,例如Google Protobuf
  4. 如果要在您的应用程序之外读取文件,那么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();
      }
    }