Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JPA和RESTAPI的Java序列化_Java_Jpa_Serialization - Fatal编程技术网

使用JPA和RESTAPI的Java序列化

使用JPA和RESTAPI的Java序列化,java,jpa,serialization,Java,Jpa,Serialization,正如我们所知,java中使用的是序列化 将对象的状态转换为字节流,可以 保存到磁盘/文件中,或通过网络发送到任何其他正在运行的 Java虚拟机 REST API案例: 现在考虑第二种情况,将一个网络发送到另一个运行的JVM < /强>,如果我们考虑一个“强> REST API < /强>的例子,即“主机:端口/路径/资源”。< /P> 通常我使用Spring的@RequestMapping将资源模型pojo类作为ResponseEntity返回。我没有在模型类中实现Serializable接

正如我们所知,java中使用的是
序列化

将对象的状态转换为字节流,可以 保存到磁盘/文件中,或通过网络发送到任何其他正在运行的 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);