我正在开发一个简单的客户端/服务器程序,现在它应该做的就是在连接时从客户端向服务器发送一个对象,然后从服务器发送一个包含响应的对象。
我的对象应该发送用户名和密码。是的,我知道还有其他方法可以验证 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/