FastJson 的JSON.toJSON方法吃掉了Map的key

public static void main(String[] args) {  
    File file = new File("C://Users//Desktop//test.jpg");  
 try (InputStream inputStream = new FileInputStream(file)) {  
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();  
  IOUtils.copy(inputStream, byteArrayOutputStream);  
 byte[] bytes = byteArrayOutputStream.toByteArray();  
  ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);  
  Map<String, Object> map = Maps.newHashMap();  
  map.put("test", byteArrayInputStream);  
  Object object = JSON.toJSON(map);  
  System.out.println();  
  }catch (Exception e){  
  
    }  
}

当执行上段代码时,我惊奇地发现经过toJson方法后,获得的object的value竟然是空的,我断点进JSON里看过,在处理value时又进行了一次toJSON的操作,然后一次序列之后,value消失了
image.png

不知道是不是和ByteArrayInputStream的序列化有关,希望大神帮忙解答一下,十分感谢

阅读 3.5k
1 个回答

倒不是FastJson吃掉了Mapkey,而是可能要明白序列化的意义哈

序列化不就是为了把对象转换成字节,然后方便存储,传输么
反序列化不就是为了把字节转换为对象,或者数据应该有的表现形式

因此那stream里的各种InputStreamOutputStream实现本身就是字节序列啊,还有啥可序列化的呢

比如你就是读图片噻,图片你看着是图片的样子,但是你代码去读还是只能按照字节去读,这个就是反序列化了嘛

因此不是FastJson吃掉了Mapkey,是人家压根就不会考虑处理stream(就像你本来就结婚扯证,但还要跑去民政局去扯结婚证,不要冒充单身狗哈~)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题