java - 如何将 Map 转换为 Bytes 并保存到内部存储

标签 java android file-io

如何转换我的 Map<Integer, String > 至 byte[] ,然后写入内部存储?我目前有:

        try {
            FileOutputStream fos = context.openFileOutput(Const.FILE_CATEGORIES, Context.MODE_PRIVATE);
            fos.write(null);
        } catch (FileNotFoundException e) {
            // reload and create the file again
        }

但是..我不知道如何获得 Map转换成正确的格式,然后在需要再次加载时将其解码回原始格式。我需要每周重新创建一次此文件,并在应用程序启动时加载它。

最佳答案

  1. 在 java 中使用序列化,您可以轻松解析任何可序列化的 对象到字节流。尝试使用 ObjectInputStream 和 对象输出流。

  2. 使用json恢复。你可以使用 google-gson 来转换 Java 对象到 JSON,反之亦然。

  3. 在 android 中使用 Parcel。类 android.os.Parcel 旨在传递数据 android(activity, service) 中的组件之间,但是你仍然可以使用它来做数据持久化。 请记住不要将数据发送到互联网,因为不同 平台可能有不同的算法来进行解析。

我写了一个连载demo,你试试看

public static void main(String[] args) throws Exception {
    // Create raw data.
    Map<Integer, String> data = new HashMap<Integer, String>();
    data.put(1, "hello");
    data.put(2, "world");
    System.out.println(data.toString());

    // Convert Map to byte array
    ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
    ObjectOutputStream out = new ObjectOutputStream(byteOut);
    out.writeObject(data);

    // Parse byte array to Map
    ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
    ObjectInputStream in = new ObjectInputStream(byteIn);
    Map<Integer, String> data2 = (Map<Integer, String>) in.readObject();
    System.out.println(data2.toString());
}

关于java - 如何将 Map 转换为 Bytes 并保存到内部存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8517323/

相关文章:

java - Cucumber Runner 类未运行步骤定义

java - 在 Java 中的 String 变量的开头添加一行的最佳解决方案是什么?

java - 使用列的 IF 更新 SQLite (Android) 中的表

python - 将请求的响应保存到文件

java - 如何使用 swing 创建一个简单的两行边框?

java - Maven 找不到 org.codehaus.mojo :exec-maven-plugin at command line

java - 如何将自定义数据和字段添加到Android的“联系人”屏幕?

java - 将图像尺寸 (60x60) 转换为其他屏幕

java - hadoop关闭写在本地磁盘上的文件

Python循环读取并解析目录中的所有内容