gpt4 book ai didi

Java 网络序列化在可序列化对象上失败

转载 作者:可可西里 更新时间:2023-11-01 02:47:21 24 4
gpt4 key购买 nike

我正在开发一个简单的客户端/服务器程序,现在它应该做的就是在连接时从客户端向服务器发送一个对象,然后从服务器发送一个包含响应的对象。

我的对象应该发送用户名和密码。是的,我知道还有其他方法可以验证 TCP 连接,但这是一个帮助我熟悉 java 网络的测试。

我的对象是这样写的:

   import java.io.Serializable;

public class AuthAccount implements Serializable{
private static final long serialVersionUID = -8918729105550799244L;
private String username;
private String password;

AuthAccount(String user, String pass){
username = user;
password = pass;
}
String username(){
return username;
}
String password(){
return password;
}
}

Socket 连接成功,但是在这一行失败(oos is ObjectOutputStream):

System.out.print("Sending login object to server...");
oos.writeObject(new AuthAccount("user", "password"));
System.out.println("Done!");

我一直收到错误:

java.io.NotSerializableException: AuthAccount

我已经使用 char[] username = new char[30]; 尝试了 AuthAccount 测试类,以获得固定大小的对象。我更喜欢 C++,但对于这个项目,Java 对我来说很有意义。

最佳答案

您必须使用旧版本的构建,因为

public class Main {
public static void main(String... args) throws IOException, ClassNotFoundException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(new AuthAccount("u", "p"));
oos.close();

ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
Object aa = ois.readObject();
}
}
class AuthAccount implements Serializable{
private static final long serialVersionUID = 1;
private final String username;
private final String password;

AuthAccount(String user, String pass){
username = user;
password = pass;
}
String username(){
return username;
}
String password(){
return password;
}
}

运行没有错误。

关于Java 网络序列化在可序列化对象上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11889260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com