Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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,在过去的几周里,我开始在套接字上发送数据。我首先用数据发送多个字符串,然后将数据解析为浮点数或任何我需要的类型。但随着时间的推移,我注意到我的客户机开始变慢,因为它读取和转换多个字符串并使用它们,而我的服务器只是在抛出它们。所以我开始发送可串行化的对象,这些对象很好用,但我对它们有一些疑问 public class Packet implements Serializable{ private static final long serialVersionUID = -789604438

在过去的几周里,我开始在套接字上发送数据。我首先用数据发送多个字符串,然后将数据解析为浮点数或任何我需要的类型。但随着时间的推移,我注意到我的客户机开始变慢,因为它读取和转换多个字符串并使用它们,而我的服务器只是在抛出它们。所以我开始发送可串行化的对象,这些对象很好用,但我对它们有一些疑问

public class Packet implements Serializable{
    private static final long serialVersionUID = -7896044384334791233L;
    //data here
}

我要发送的类看起来像这样,但包含我要发送的数据。删除串行版本ID会产生错误。serialVersionUID是什么?如果我发送的所有对象中的serialVersionUID都是相同的,那么为什么我的程序需要这个ID才能工作呢

这是一种说明数据格式的方法。如果从中删除字段 在您的类中,您应该更改SerialVersionUID,否则对象的使用者可能会错误地读取它

看看这个答案

请参阅此链接以查看不兼容的更改,如删除字段

您还可以重写Java用来用writeObject和readObject序列化对象的默认方法。如果您知道压缩对象数据(例如)将减少组件之间的网络通信量,那么这可能很有用。或者,您可能希望通过某种定制方式发送数据,这种方式比默认的Java方式更为优化


看看这个答案

看。你能解释出现的错误吗?没有错误,我只是想解释一下串行版本在通过socketi发送对象时扮演的角色。如果你在类中添加了一个新字段,你就不应该更改
serialVersionUID
。您需要阅读对象序列化规范的版本控制章节。真的吗?也许我应该。你能告诉我为什么吗?在什么情况下你应该这样做?我找到了规范并在我的回答中引用了它。你仍然错了。如果从类中删除字段,则在更改
serialVersionUID
后,旧代码仍可读取该字段。试试看。把这个东西当作一个版本号是一个城市神话,毫无疑问,部分原因是它的名字选得不好。我知道你把它标为一个副本,但你介意编辑我的答案,这样它才是正确的吗?你已经花了两次时间告诉我我错了,所以你不应该花太多时间来纠正我的错误。非常感谢你,我只是想和其他人一样帮助你。