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 - CDI 注入(inject)的 bean 是否需要 getter 和 setter?

java - 我使用 shareDpreferences 将字符串保存在 textView 中,关闭应用程序并再次打开后,它不起作用

python - 从文件中删除单词

java - 无法使用maven命令行工具

java - 查找包含文本的所有对象的查询

android - 在 android Nougat 中裁剪图像

c# - 在哪里存储自定义配置文件

haskell - 如何在处理下一个请求之前强制 yesod/warp 关闭打开的文件句柄?

java - 如何检查电子邮件是否存在,除了请求的用户之外?

android - 在android中添加联系人照片