【发布时间】:2020-10-13 05:49:33
【问题描述】:
我的问题可能听起来很基本,但我对杰克逊的 writeValueAsString(String) 也称为序列化和 java 对象到字节流的转换也称为序列化有点困惑。
谁能帮我理解;两者有何不同?
我问这个问题的原因是,我遇到了一个调用 REST 服务的场景。 REST 在 10 秒内使用 JSON 响应。但是,如果我在服务器端记录 writeValueAsString(String) 的时间,几乎不需要一秒钟。
更新 1:这就是我所观察到的
-
上次登录调用的 REST 服务(返回集合)打印时间为 -->9:10:10 UTC。而且,当我使用 curl 调用服务时,数据同时开始在我的机器上流式传输 Git bash。
-
最后一次登录我的 Servlet 过滤器 10 秒后(因为拦截了对 REST api uri 的请求)在 --> UTC 9:10:20 打印出来,同时数据流在 Git bash 处停止(下载了近 35Mb )。那么,这种行为的原因可能是什么?
如果 Jackson 在序列化仍在进行时同时开始通过网络发送字节?
是杰克逊序列化速度慢还是网络带宽低?
请注意,我尝试仅使用 writeValueAsString(..)/readValue(..) 操作运行序列化和反序列化,而无需通过 junit 使用相同的数据集进行任何网络调用,并且它们在一秒钟内执行。
谢谢
【问题讨论】:
-
来自wikipedia:在计算中,序列化(或序列化)是将数据结构或对象状态转换为可以存储的格式(例如,在文件或内存中)的过程缓冲区)或传输(例如,通过网络连接链路)并在以后重建(可能在不同的计算机环境中)。
-
Java 序列化获取一个对象并将其转换为字节流。杰克逊在转换为 JSON 时也会发生同样的情况,只是字节流的格式不同。由于 JSON 是一种文本格式,因此可能存在一些混淆,但请记住,对于计算机来说,一切都是 1 和 0,甚至是文本。重要的是两端都理解格式。
-
Slaw,那需要什么时间?如果从 writeValueAsString(..) 到在客户端收到响应将近 9 秒,其中 writeValueAsString(..) 只消耗一秒时间。
-
您能否提供指向
writeValueAsString的Javadoc 的链接?或者在您的问题中提供minimal reproducible example? -
我刚刚用更新 1 更新了我的问题。
标签: java json serialization jackson jsonserializer