对象序列化到字节与杰克逊序列化从对象到 JSON?
Posted
技术标签:
【中文标题】对象序列化到字节与杰克逊序列化从对象到 JSON?【英文标题】:Object Serialization to bytes vs Jackson serialization from Object to JSON? 【发布时间】: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 更新了我的问题。
【参考方案1】:
10秒的服务器响应时间不仅仅是序列化时间,它包括:
请求通过网络到达 REST 服务服务器的总时间 REST 服务应用程序中的内部处理 响应通过网络到达您的应用程序 (另外还有其他各个层所花费的时间,但为简单起见,不包括它们)。对于序列化 - 在此处添加来自 @Lino 的评论:
在计算中,序列化(或序列化)是将数据结构或对象状态转换为可以存储(例如,在文件或内存缓冲区中)或传输(例如,通过网络连接链路)的格式的过程) 并在以后重建(可能在不同的计算机环境中)
来源:Wikipedia
【讨论】:
微笑,我计算了网络上的时间,服务器端处理请求所消耗的时间,但即使考虑了所有时间,我认为序列化响应所花费的时间远远超过jsons writeValueAsString(..) 操作消耗的时间。 writeValueAsString() 不是我们所说的序列化吗?为什么? 查看@Slaw 关于 writeValueAsString 是否为序列化的评论。我建议使用 Postman 等其他客户端访问 REST 服务,然后将响应时间与使用 java 的响应时间进行比较。另外,响应的大小是多少? 您是否也拥有您正在调用的 REST 服务?如果是,您可以在该服务中进一步分析哪个组件花费的时间最多。以上是关于对象序列化到字节与杰克逊序列化从对象到 JSON?的主要内容,如果未能解决你的问题,请参考以下文章