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

如何将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和ObjectOuputStream。

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

  3. 在android中使用Parcel。 android.os.Parcel类设计用于在android(活动,服务)中的组件之间传递数据,但您仍然可以使用它来执行数据持久化。 请记住,不要将数据发送到互联网,因为不同的平台可能有不同的算法来进行解析。

我写了一个序列化的演示,试一试。

 public static void main(String[] args) throws Exception { // Create raw data. Map data = new HashMap(); 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 data2 = (Map) in.readObject(); System.out.println(data2.toString()); } 

要么像提到的faylon一样序列化,要么实现自己的机制来保存和加载你的地图。 通过保存,您可以遍历所有元素并保存键值对。 通过加载,您可以将它们添加回来。 实现自己的机制的优点是,当程序与其他Java版本一起使用时,您仍然可以使用持久值。