将对象序列化为字节与使用 Jackson 将对象序列化为 JSON 有什么区别?

3
我的问题可能听起来很基础,但我对Jackson的writeValueAsString(String)被称为序列化和将Java对象转换为字节流也被称为序列化有些困惑。
有人能帮我理解一下它们两者之间的区别吗?
我问这个问题的原因是,我遇到了这样一种情况:我调用REST服务。REST以JSON形式在10秒内响应。然而,如果我记录服务器端的writeValueAsString(String)的时间,它只需要一秒钟左右。
更新1:这就是我观察到的
1. 上次调用REST服务(返回一个集合)的最后一条日志打印时间是-->9:10:10 UTC。同时,由于我正在使用curl调用服务,数据在我的机器Git Bash上开始流式传输。 2. 10秒后我的Servlet过滤器的最后一条日志(拦截对REST api uri的请求)在--> 9:10:20 UTC打印出来,同时Git Bash上的数据流式传输停止(近35Mb已下载)。那么,这种行为的原因是什么?
如果Jackson在序列化仍在进行中时同时开始发送字节呢?
这是因为Jackson序列化速度慢还是网络带宽低?
请注意,我尝试只使用writeValueAsString(..)/readValue(..)操作而没有任何网络调用通过junit运行我的序列化和反序列化,并且它们在一秒钟内执行完毕。
谢谢

1
在计算机领域中,序列化(Serialization或Serialisation)是将数据结构或对象状态转换为可存储的格式(例如文件或内存缓冲区)或可传输的格式(例如跨网络连接链路),并在以后重建(可能在不同的计算机环境中)的过程。 - Lino
3
Java序列化将对象转换为字节流。当使用Jackson将其转换为JSON时,同样会发生这种情况,只是字节流的格式不同。可能会有一些混淆,因为JSON是一种文本格式,但请记住,对于计算机来说,即使是文本也是由1和0组成的。重要的是双方都理解这种格式。 - Slaw
Slaw,那么会花费时间吗?如果从writeValueAsString(..)到客户端接收响应需要近9秒的时间,其中writeValueAsString(..)只消耗了一秒钟的时间。 - Jaraws
你能提供writeValueAsString的Javadoc链接吗?或者在你的问题中提供一个[mre]吗? - Slaw
我刚刚更新了我的问题,附上了更新1。 - Jaraws
1个回答

3

10秒的服务器响应时间不仅包括序列化时间,还包括以下内容:

  • 请求通过网络到达REST服务端的总时间
  • REST服务应用程序内部处理时间
  • 响应通过网络到达应用程序的时间
  • (此外还有其他各个层面的时间,但为简单起见不予考虑)

关于序列化 - 添加@Lino的评论:

在计算机中,序列化(或串行化)是将数据结构或对象状态转换为可以存储(例如在文件或内存缓冲区中)或传输(例如跨网络连接链路)并最终重建的格式(可能在不同的计算机环境中)的过程。

来源:Wikipedia


微笑,我已经通过网络计算出了处理请求所花费的时间,但即使考虑了所有这些时间,我认为序列化响应所花费的时间仍然比 jsons writeValueAsString(..) 操作消耗的时间要多得多。writeValueAsString() 不是我们称之为序列化的东西吗?为什么? - Jaraws
请查看@Slaw的评论,了解writeValueAsString是否为序列化。我建议使用其他客户端(如Postman)访问REST服务,然后将响应时间与使用Java进行访问的响应时间进行比较。另外,响应的大小是多少? - Smile
你也拥有你所调用的REST服务吗?如果是,你可以在该服务中进一步分析哪个组件花费了最多的时间。 - Smile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接