【发布时间】:2015-10-20 10:57:26
【问题描述】:
我有一个程序从返回为byte[] 的数据库中获取ID。我想使用这些 id(字节数组)作为映射的键。默认情况下这不起作用,因为比较的是“对象相等”而不是“内容相等”。
接下来我尝试了 似乎 的工作是使用 new String(byte[]) 构造函数实例化一个字符串。虽然这似乎有效,但我知道我正在做一些潜在的狡猾的事情。我没有指定依赖于系统默认值的编码。我也不知道是否所有字节序列在每种编码中都有表示。
为了执行map.put() 和map.get() 安全而将byte[]“转换”为String 是否安全?有没有我没有考虑过这种方法会无意中造成冲突的极端情况(其中 2 个不同的byte[] 具有不同的内容可能会变成相同的String)。
注意:地图存储在内存中,仅适用于单个应用程序运行。 如果这种方法可行,我编写的简单包装类可以让我的生活更轻松:
public class Cache {
Map<String, Set<String>> cache = new HashMap<String, Set<String>>();
public Cache() {}
public void put(byte[] key, Set<String> value) {
cache.put(new String(key), value);
}
public Set<String> get(byte[] key) {
return cache.get(new String(key));
}
}
【问题讨论】:
-
这似乎相关,可能会有所帮助:stackoverflow.com/questions/16839182/…
标签: java