![](/img/trans.png)
[英]Java object serialization, how to use same file after using it with ObjectOutPutStream
[英]Must the object be the same one when using ObjectOutputStream() in java?
我在服务器和客户端中定义了一个对象“ User”。 服务器端的“用户”只有一个构造函数,getter和setter,而客户端的“ User”有其他方法。
我的项目结构如下:
代码如下:
服务器:
class User implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private String password;
private String role;
User(String name, String password, String role) {
this.setName(name);
this.setPassword(password);
this.setRole(role);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String toString() {
return this.name + this.password + this.role;
}
}
客户端:
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private String password;
private String role;
User(String name, String password, String role) {
this.name = name;
this.password = password;
this.role = role;
}
/*=====================getter and setter========================*/
public void set(String name, String password, String role) {
this.name = name;
this.password = password;
this.role = role;
}
public String get() {
return this.name + " " + this.password + " " + this.role;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return this.password;
}
public void setRole(String role) {
this.role = role;
}
public String getRole() {
return this.role;
}
/*==================Method===================*/
public void showMenu(String title) {
}
}
我想将User对象从客户端发送到服务器。 但是会抛出ClassNotFoundException。
java.lang.ClassNotFoundException: pers.yangxujie.RecordMangerServer.main.User
为什么? 我是否必须使用相同的“ User”对象?(但是我必须在两端都定义它们,因为它是c / s模型)
根据您显示的内容,我认为问题在于服务器端的类路径中没有名为pers.yangxujie.RecordMangerServer.main.User
的类。
如果问题是由于客户端和服务器端的类版本不同而引起的,那么我希望看到不同的异常。 在序列化和反序列化时,使用不同版本的类通常是(IMO)的坏主意,因为差异可能会引起各种问题(如果您不小心的话)。 但是,有时这是不可避免的。
两端的类应相同 。 具有相同名称的不同类。 这里的“相同”表示相同的名称,相同的软件包,相同的serialVersionUID
。
如果您真的知道自己在做什么,则类可以对它们的字段有轻微的分歧,但要遵循对象序列化规范的“版本控制”一章的规定:这可以方便地解决无法解决的部署问题同时更新服务器和客户端。
但是,从一开始就在同一系统中拥有两个称为User的不同类是没有意义的。 在这种情况下,很可能它们位于不同的程序包中,这使它们成为不同的类。 这不适用于序列化目的。
服务器类是否在其自己的单独文件中? 确保他们都不是内部阶级
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.