Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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
Java 可序列化类_Java_Serialization - Fatal编程技术网

Java 可序列化类

Java 可序列化类,java,serialization,Java,Serialization,可序列化类的意义是什么?据我所知,这是为了让您可以通过网络发送对象,并知道在两端都将验证对象是否正确。例如,如果我有一个具有可序列化类的服务器,并且希望通过对象输出流向应用程序发送数据,那么我可以使用两端具有相同UID的可序列化类来验证对象是否合法且未被入侵?如果我错了,请纠正我,但这就是我理解可序列化接口文档的方式你是对的,但你可以更广泛地思考它 可以将可序列化类转换为字节 您可以将此类型的对象添加到可序列化的集合中,它将被正确序列化(例如,如果列表可序列化,您可以创建它们的列表并序列化列表

可序列化类的意义是什么?据我所知,这是为了让您可以通过网络发送对象,并知道在两端都将验证对象是否正确。例如,如果我有一个具有可序列化类的服务器,并且希望通过对象输出流向应用程序发送数据,那么我可以使用两端具有相同UID的可序列化类来验证对象是否合法且未被入侵?如果我错了,请纠正我,但这就是我理解可序列化接口文档的方式

你是对的,但你可以更广泛地思考它

  • 可以将可序列化类转换为字节

  • 您可以将此类型的对象添加到可序列化的集合中,它将被正确序列化(例如,如果列表可序列化,您可以创建它们的列表并序列化列表)


顺便说一下,serialVersionUID是可选的。它将自己生成一个,尽管它会有点脆弱——例如,如果您更改了一个方法签名,jvm将把它转换为一个更改的签名,并且认为该类现在与以前的序列化版本不兼容,即使您没有更改数据字段。如果你创建了你自己的,你实际上是在覆盖这个机制。

你是对的,但是你可以更广泛地考虑它

  • 可以将可序列化类转换为字节

  • 您可以将此类型的对象添加到可序列化的集合中,它将被正确序列化(例如,如果列表可序列化,您可以创建它们的列表并序列化列表)


顺便说一下,serialVersionUID是可选的。它将自己生成一个,尽管它会有点脆弱——例如,如果您更改了一个方法签名,jvm将把它转换为一个更改的签名,并且认为该类现在与以前的序列化版本不兼容,即使您没有更改数据字段。如果您创建自己的,那么实际上就是覆盖了这个机制。

安全性和序列化都是不同的

Java序列化是将对象转换为字节。句号

该字段用于确保序列化和反序列化对象(结构)版本匹配


序列化对于将对象转换为文件并在以后将其重新加载回对象非常有用,当然,您也可以通过网络发送该文件(流)。

安全性和序列化都是不同的

Java序列化是将对象转换为字节。句号

该字段用于确保序列化和反序列化对象(结构)版本匹配


序列化有助于将对象转换为文件,并在以后将其重新加载到对象中,当然,您也可以通过网络发送该文件(流)。

不,关键不是安全性。中间的人很容易用另一个来代替你的目标。关键是。。。能够以非常简单的方式将对象图转换为字节,反之亦然。可序列化类可以由java自动从文件中写入和读取(只要它可以访问该类)。当包含类的消息在队列上时,这允许JMS队列之类的东西将类写入文件。不,关键不是安全性。中间的人很容易用另一个来代替你的目标。关键是。。。能够以非常简单的方式将对象图转换为字节,反之亦然。可序列化类可以由java自动从文件中写入和读取(只要它可以访问该类)。这样,当包含类的消息在队列上时,JMS队列之类的东西可以将类写入文件。因此,为了确保对象在两端都相同,接收端和发送端都应该具有相同的serialVersionUID?如果缺少,某些IDE会警告您,但它仍然是可选的。如果不使用它,jvm将根据字段、方法签名等生成一个。如果通过网络在接收端发送,jvm仍然需要一个类定义来序列化字节,因此它将使用该类定义生成svid。如果包含自己的序列化,只要字段匹配,序列化仍然可以工作(据称,速度也快得可以忽略不计)。请注意,如果您想将其用于联网,大多数专用库(例如thrift)都比基本jvm序列化快得多。实际上,我们应该学习Joshua Bloch的《有效Java中的可序列化》部分。因此,为了确保对象在两端都相同,接收端和发送端都应该具有相同的serialVersionUID?如果缺少,某些IDE会警告您,但它仍然是可选的。如果不使用它,jvm将根据字段、方法签名等生成一个。如果通过网络在接收端发送,jvm仍然需要一个类定义来序列化字节,因此它将使用该类定义生成svid。如果包含自己的序列化,只要字段匹配,序列化仍然可以工作(据称,速度也快得可以忽略不计)。请注意,如果您想将其用于联网,大多数专用库(如thrift)都比基本jvm序列化快得多,我问这个问题的主要原因是因为我有一个服务器端程序,它从客户端收集用户信息并存储在数据库中。然后,客户端(android应用程序)可以从数据库请求信息,服务器将每个用户的数据转换为对象。我担心通过ObjectOutputStream发送
列表
,以及从服务器发送到客户端时,它在客户端的外观如何@K139@Darkman9333你考虑过使用REST服务吗?为什么要发送序列化类?我被指向REST服务的方向