[英]Serialize an Object Array to sent over Sockets
我有一个从数据库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();
有人可以帮我把这个阵列弄成丝毫吗。 我在论坛中只能找到简单的数组(例如:EG。int [])。
我试图将可序列化的代码添加到类和UID编号中,但收到java.lang.ClassNotFoundException: socketserver.ProteinData
错误消息。 现在有人吗?
谢谢你的帮助。
基本上,您需要要序列化的类正在实现Serializable
。 而且,如果您想避免与串行相关的警告,则每个序列也应有一个long serialVersionUID
,这是用于区分类的特定版本的代码。 读到这样的教程这样一个以获得更多的信息,系列化是不是很难处理..
但是请记住,当在两个不同版本的JVM之间使用时,序列化是有缺陷的(通常存在一些缺陷)。
附带说明: Serializable
接口实际上并未为类本身提供任何必需的功能(这不是典型的接口),它仅用于区分应该通过流发送的类和所有其他类。 当然,如果一个类是Serializable
,则它使用的所有组件(实例变量)也必须可序列化才能发送整个对象。
将您的类声明更改为:
ProteinData类实现可序列化的 {...}
我本以为您至少需要
ProteinData类实现了Serializable和一个
私有静态最终长serialVersionUID = 1234556L; (Eclipse将为您生成幻数)。 在课堂里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.