使用JPA和RESTAPI的Java序列化
正如我们所知,java中使用的是使用JPA和RESTAPI的Java序列化,java,jpa,serialization,Java,Jpa,Serialization,正如我们所知,java中使用的是序列化 将对象的状态转换为字节流,可以 保存到磁盘/文件中,或通过网络发送到任何其他正在运行的 Java虚拟机 REST API案例: 现在考虑第二种情况,将一个网络发送到另一个运行的JVM < /强>,如果我们考虑一个“强> REST API < /强>的例子,即“主机:端口/路径/资源”。< /P> 通常我使用Spring的@RequestMapping将资源模型pojo类作为ResponseEntity返回。我没有在模型类中实现Serializable接
序列化
将对象的状态转换为字节流,可以
保存到磁盘/文件中,或通过网络发送到任何其他正在运行的
Java虚拟机
- REST API案例:
现在考虑第二种情况,<强>将一个网络发送到另一个运行的JVM < /强>,如果我们考虑一个“强> REST API < /强>的例子,即“主机:端口/路径/资源”。< /P> 通常我使用Spring的
@RequestMapping
将资源模型pojo类作为ResponseEntity
返回。我没有在模型类中实现Serializable
接口,一切正常,我得到了json中API的响应
ModelX.java
public class ModelX {
private int x = 2 ;
private String xs = "stringx";
// getters and setters
}
控制器方法:
@RequestMapping(value = "/test",method=RequestMethod.POST)
public ResponseEntity<ModelX> getTestModel(@RequestBody ModelX mox){
ModelX mx = new ModelX();
mx.setX(mox.getX());
mx.setXs(mox.getXs());
return new ResponseEntity<ModelX>(mx, HttpStatus.OK) ;
}
测试方法-
Car c = new Car();
System.out.println(c instanceof Serializable);
O/p-错误
因此,即使我们试图将此对象的状态保存到数据库中,ORM也会在后台执行某种序列化?序列化是一个普遍的概念:
Serializable
用于序列化的单个特定实现,该实现恰好内置到JVM中,称为“Java序列化”。但转换为JSON或数据库用于通信的任何协议也是序列化;它们只是与可序列化的无关
是否存在任何特定的场景或应用程序(如果您知道的话),其中发送ByTestStream更为有利
首先,二进制格式比JSON小,读/写速度更快。它们仍然可以跨平台。但对于这一点,您通常会使用与Java序列化不同的二进制格式:例如or(或许多其他格式)
因此,如果发送数据的应用程序宕机,其他jvm仍然可以使用数据。(在API的情况下不会发生)
这同样适用于JSON(或者如上所述的PB或Thrift)。对于其余部分,对象的状态不会转换为字节流,而是转换为JSON文本文档。对于Hibernate/JPA部分,请参见这个问题:@Arnaud好的,有意义。在现代应用程序中,我看到的最常用的格式是JSON,是否有任何特定的场景或应用程序(如果您知道的话)更适合发送ByTestStream?如果要将数据“发送到”/“由”另一个JVM读取,则将状态转换为ByTestStream是相关的(将使用ObjectInputStream将字节转换回java对象)@Arnaud,但我仍然可以使用API与其他JVM对话,对吗?所以我想知道bytestream发送/读取的任何场景是否有益,因为在序列化的情况下,仍然会有一点开销,即写入文件,然后再次读取。如果我错了,请纠正我OK可能有一件事是我们可以ld将状态保存到文件中,这样,如果发送数据的应用程序关闭,数据仍然可以用于其他jvm。(在API中不会发生)“这在JSON中也能很好地工作”,是的,如果我们以json格式序列化。如果我做得很好,这会是一个好例子吗?假设我有一个游戏,在一些检查点/级别之后,我将进度存储/写入客户端文件系统中。因此,每当游戏崩溃后,甚至在系统重新启动后,我总是从该文件中选择进度来恢复gamea序列化用例然后是。特别是对于Java序列化,如果您想从游戏的旧版本加载保存文件,它会变得更加复杂,因此您可能仍然希望使用其他框架。
Car c = new Car();
System.out.println(c instanceof Serializable);