将HashMap.toString()转换回Java中的HashMap


问题内容

我将键值对放入Java中,HashMapString使用toString()方法将其转换为。

是否可以将这种String表示形式转换回HashMap对象并使用其对应的键检索值?

谢谢


问题答案:

toString()这种方法依赖于的实现,toString()并且在大多数情况下可能是有损的。

这里不可能有无损解决方案。但更好的方法是使用对象序列化

将对象序列化为字符串

private static String serialize(Serializable o) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(baos);
    oos.writeObject(o);
    oos.close();
    return Base64.getEncoder().encodeToString(baos.toByteArray());
}

将字符串反序列化为对象

private static Object deserialize(String s) throws IOException,
        ClassNotFoundException {
    byte[] data = Base64.getDecoder().decode(s);
    ObjectInputStream ois = new ObjectInputStream(
            new ByteArrayInputStream(data));
    Object o = ois.readObject();
    ois.close();
    return o;
}

在此,如果用户对象具有临时字段,则它们将在过程中丢失。


旧答案


一旦使用toString()将HashMap转换为String;不是您可以将其从该String转换回Hashmap,而只是将其转换为String表示形式。

您可以将对HashMap的引用传递给method,也可以对其进行序列化

这是toString()的描述toString()
是带有序列化说明的示例代码。

并将hashMap作为arg传递给方法。

public void sayHello(Map m){

}
//calling block  
Map  hm = new HashMap();
sayHello(hm);