在 Java 中将 HashMap.toString() 转换回 HashMap
我在Java中放置了一个键值对,并将其转换为使用该方法。HashMap
String
toString()
是否可以将此表示形式转换回对象并检索具有相应键的值?String
HashMap
谢谢
我在Java中放置了一个键值对,并将其转换为使用该方法。HashMap
String
toString()
是否可以将此表示形式转换回对象并检索具有相应键的值?String
HashMap
谢谢
如果 toString() 包含还原对象所需的所有数据,它将起作用。例如,它将适用于字符串映射(其中字符串用作键和值):
// create map
Map<String, String> map = new HashMap<String, String>();
// populate the map
// create string representation
String str = map.toString();
// use properties to restore the map
Properties props = new Properties();
props.load(new StringReader(str.substring(1, str.length() - 1).replace(", ", "\n")));
Map<String, String> map2 = new HashMap<String, String>();
for (Map.Entry<Object, Object> e : props.entrySet()) {
map2.put((String)e.getKey(), (String)e.getValue());
}
这有效,尽管我真的不明白为什么你需要这个。
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转换为字符串;这并不是说你可以从那个字符串将其转换回哈希映射,它只是它的字符串表示形式。
可以将对 HashMap 的引用传递给方法,也可以将其序列化
下面是 toString() toString()
的描述 下面是带有序列化说明的示例代码。
并将 hashMap 作为 arg 传递给方法。
public void sayHello(Map m){
}
//calling block
Map hm = new HashMap();
sayHello(hm);