【问题标题】:How can I get the byte value in a Map [duplicate]如何获取地图中的字节值[重复]
【发布时间】:2014-07-29 14:44:23
【问题描述】:

我想获取 Map 对象中一个字节的值。

Map<String, Object> data = new HashMap<>();
data.put("foo", new byte[]{4});

System.out.println(data.get("foo"));

我得到的是这样的...... [B@1a779dce

请帮帮我。

【问题讨论】:

  • 这就是toString() 实现byte[] 类的样子,你的期望是什么
  • 我想得到字节的值为4。
  • data.get("foo") 返回一个byte[],它不是byte。您必须指定一个索引。
  • 这个重复的答案不是一个exact重复的,因为那个人谈论的是int[]而不是byte[]。但同样的概念也适用。基本上,您正在取回byte[],但它并没有像您期望的那样打印。
  • data.get("foo") 是 Object 类型。

标签: java


【解决方案1】:

正如@JigarJoshi 在他的评论中提到的,这就是byte[] 类的toString() 实现的样子。当您对byte[] 执行System.out.println 时,将调用toString() 方法以在打印前将其转换为String

如果要读取单个字节,则必须循环返回值。

byte[] ba = (byte[]) data.get("foo");
for (byte b: ba) {
    System.out.println(b);
}

【讨论】:

  • data.get("foo") 是 Object 类型。
  • @Kuletzxc,已修复。谢谢!
  • 很好......它正在工作。感谢您的帮助。
【解决方案2】:

当您将 Object 添加到 Map 而不是 byte[] 时,您需要对其进行转换。

Map<String, Object> data = new HashMap<>();
data.put("foo", new byte[]{4,3,1,2});
System.out.println(Arrays.toString((byte[])data.get("foo")));

输出

[4,3,1,2]

【讨论】:

  • 很好...这个也可以。谢谢你们的帮助。
  • 太好了!!很高兴为您提供帮助!!
猜你喜欢
  • 2016-04-04
  • 1970-01-01
  • 2013-05-20
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多