我将键值对的哈希映射声明为,
HashMap<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
我正在使用一种方法序列化此hashmap,并使用以下代码将其转换为字符串:
public static String serializeMetadata(HashMap<String, String> metadata) throws IOException {
try(ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos)) {
oos.writeObject(metadata);
return baos.toString();
}
}
当我调用序列化元数据方法并将我的hashmap作为输入传递时,我希望映射状态由ObjectOutputStream流式传输,并在ByteArrayOutputStream(baos)中存储字节数组
{key1=value1,key2=value2,key3=value3}
当我们将hashmap转换为字符串时,输出类型相同。相反,我得到了一些不可读的格式化字符串,比如,
���sr�JAVAutil。哈希图���`��F� 负荷因子� 阈值XP@�����������T�键1T�价值1t�键2T�值2t�键3T�值3x
我明白,如果我反序列化了BAO,我会再次得到一个hashmap,如果我做了一个toString(),我会得到我需要的格式。
当序列化的hashmap转换为字符串时,我需要一个格式化的字符串,所以,1。我可以为字符串2编写单元测试并断言hashmap。将该字符串(包含所有格式化的键和值)保留在DB中,以便将来进行数据分析。3.我可以在应用程序中从DB调用字符串,并将其反序列化回hashmap,然后继续使用现有状态。
我不想要JSON字符串。想象一下,hashmap的所有键值对都存储在DB的单个字段中。我找不到正确的解决方案,所以如果有任何重复的链接,请把它们放在评论中。任何帮助都很感激。谢谢!
首先,您说您不需要JSON字符串。但基于您打算使用它的目的,JSON字符串就可以正常工作了。
但是这里有一个快速而肮脏的建议,可以将值序列化为分隔符分隔的字符串:
>
将贴图复制到树形图中,以便键按一致的顺序排序。
使用TreeMap
上的values()。
将列表序列化为字符串;e、 g.使用
StringJoiner
和您首选的分隔符。
问题:
>
如果值类型的
toString()
方法不合适,则可能会导致不明确的渲染;e、 g.如果您选择的字段分隔符也出现在toString()
输出中。
如果你的地图的关键名称随着时间的推移而改变,你可能会遇到麻烦。
在不知道键名称应该是什么的情况下,无法重建地图。
使用JSON可以避免所有这些问题:提示!使用CSV库可以解决1.和2.,如果您可以让它一次编码一行。
另一种选择是使用
。ObjectOutputStream
将映射序列化到ByteArrayOutputStream
,然后使用bas64编码对捕获的字节进行编码。结果可以存储在数据库中,稍后用于重建HashMap
其缺点是Base64编码是不透明的,并且可能会比JSON版本占用更多的空间。
你说你现在的版本:
... 我明白,如果我反序列化了BAO,我会得到一个hashmap。
这是真的。但是,如果您将BAOS内容“解码”为字符串
,则可能会遇到问题,具体取决于您选择的字符集。你的“不可读字符串”是一个典型的例子,说明了发生了什么,这些都是错误的�' 字符可能表示无法正确解码且不会重新编码的字符。
ObjectOutputStream以二进制格式输出,需要一个ObjectInputStream来读取。如果你也通过字符串,它甚至可能不起作用。
最简单的解决方案可能是使用现有的类,如java。util。属性,该属性继承自哈希表(并实现映射),可以从另一个映射获取所有条目,也可以作为一个映射。属性可以通过加载/存储方法(基于行的字符串key=value和xml格式)轻松存储到磁盘。
要保存到文本可读文件,请执行以下操作:
Properties<String, String> props = new Properties<>();
props.putAll(map);
props.store(...);
重读一遍:
Properties<String, String> props = new Properties<>();
props.load(...);
map.putAll(props);
//or just use the props object as your Map as it implements the Map interface,
//so instead just do this:
Map<String, String> map = props;
https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html
如何将此字符串转换为忽略前2个字符和换行符(\n)或空格的字符数组?所以我有这个:
本文向大家介绍VBA 使用格式将数字类型转换为字符串并将其格式化为字符串,包括了VBA 使用格式将数字类型转换为字符串并将其格式化为字符串的使用技巧和注意事项,需要的朋友参考一下 示例
问题内容: 嗨,我有一个csv叫做。我试图逐行读取csv并将值转换为哈希键值对。这是代码:- csv文件如下:- 当我运行此代码时,出现此错误:- 谁能帮助我修复代码并找出程序中的错误? 问题答案: 在字符串中,当你把它分解的第一次只包含如没有在这样就会导致异常 如果不需要1,2等。可以查看以下代码:
问题内容: 我有一个使用long作为ID的定制类。但是,当我使用ajax调用操作时,我的ID被截断并且丢失了最后2个数字,因为javascript处理大数字时会失去精度。我的解决方案是给我的JavaScript字符串,但是ID必须在服务器端保留很长时间。 有没有一种方法可以将属性序列化为字符串?我在寻找某种属性。 控制者 模型 JSON结果 问题答案: 您可能可以创建一个自定义并将其应用于您的媒体
以下代码导致此异常: 所以问题是:如何在GSON序列化和反序列化的泛型HashMap中获得正确的实例?
问题内容: 我有一个格式化的XML文件,我想将其转换为一个行字符串,我该怎么做。 样本XML: 预期产量 提前致谢。 问题答案: 使用StringBuilder比concat更有效http://kaioa.com/node/59