我有一个从数据库 ResultSet 创建的数组。我正在尝试序列化它,以便我可以通过套接字流发送它。目前我收到一条错误消息,告诉我该数组不可序列化。我的代码如下,第一部分是为数组创建对象的类:
class ProteinData
{
private int ProteinKey;
public ProteinData(Integer ProteinKey)
{
this.ProteinKey = ProteinKey;
}
public Integer getProteinKey() {
return this.ProteinKey;
}
public void setProteinKey(Integer ProteinKey) {
this.ProteinKey = ProteinKey;
}
}
填充数组的代码:
public List<ProteinData> readJavaObject(String query, Connection con) throws Exception
{
PreparedStatement stmt = con.prepareStatement(query);
query_results = stmt.executeQuery();
while (query_results.next())
{
ProteinData pro = new ProteinData();
pro.setProteinKey(query_results.getInt("ProteinKey"));
tableData.add(pro);
}
query_results.close();
stmt.close();
return tableData;
}
调用它的代码是:
List dataList = (List) this.readJavaObject(query, con);
ObjectOutputStream output_stream = new ObjectOutputStream(socket.getOutputStream());
output_stream.writeObject(dataList);
接收此消息的代码是:
List dataList = (List) input_stream.readObject();
有人可以帮我序列化这个数组吗?我在论坛中能找到的只是简单的数组(例如 int[])。
我尝试将可序列化添加到类和 UID 号中,但收到 java.lang.ClassNotFoundException: socketserver.ProteinData
错误消息。现在有人知道为什么吗?
感谢您的帮助。
最佳答案
基本上,您需要要序列化的类实现Serialized
。如果您想避免与序列号相关的警告,您还应该为每个序列号提供一个长serialVersionUID
,这是用于区分该类的特定版本的代码。阅读类似 this one 的教程要获取更多信息,序列化并不难处理..
但是请记住,在两个不同版本的 JVM 之间使用时,序列化会出现错误(并且总体上存在一些缺陷)。
只是一个旁注:接口(interface)Serialized
实际上并没有为类本身提供任何必需的功能(它不是典型的接口(interface)),它只是用来区分应该具有的类通过流和所有其他方式发送。当然,如果一个类是可序列化的,那么它使用的所有组件(实例变量)也必须是可序列化的,才能发送整个对象。
关于java - 序列化对象数组以通过套接字发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4256631/