chr*_*ley 0 java sockets arrays serialization object
我有一个数组,我从数据库ResultSet创建.我正在尝试序列化它,以便我可以通过套接字流发送它.目前我收到一个错误,告诉我该数组不是Serializable.我的代码在下面,第一部分是为数组创建对象的类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
填充数组的代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
调用它的代码是:
List dataList = (List) this.readJavaObject(query, con);
ObjectOutputStream output_stream = new ObjectOutputStream(socket.getOutputStream());
output_stream.writeObject(dataList);
Run Code Online (Sandbox Code Playgroud)
接收到的代码是:
List dataList = (List) input_stream.readObject();
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我对这个阵列进行搜索.我在论坛中找到的只是简单的数组(EG.int []).
我试图将serializable添加到类和UID号但是收到java.lang.ClassNotFoundException: socketserver.ProteinData错误消息.现在有人为什么?
谢谢你的帮助.
基本上,您需要要序列化的类正在实现Serializable.如果你想避免与序列相关的警告,你应该long serialVersionUID为每个序列提供一个,这是一个代码,用于区分你的特定版本的类.阅读像这样的教程以获得更多信息,序列化并不是那么难以处理..
但是请记住,当在两个不同版本的JVM之间使用时,序列化是错误的(并且它通常存在一些缺陷).
只是旁注:接口Serializable实际上并没有为类本身提供任何所需的功能(它不是典型的接口),它仅用于区分应该通过流和其他所有类发送的类.当然,如果是一个类Serializable,它使用的所有组件(实例变量)也必须是可序列化的,以便能够发送整个对象.