2010-11-23 47 views
0

我有一个数组,我从数据库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; 
    } 
} 

代码填充数组:

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; 
    } 

和代码来调用这个是:

和代码recieving是这样的:

List dataList = (List) input_stream.readObject(); 

有人可以帮我把这个阵列排成一列。我可以在论坛中找到的只是简单的数组(EG。int [])。

我试图添加serializable到类和UID号码,但得到java.lang.ClassNotFoundException: socketserver.ProteinData错误消息。现在有人为什么?

感谢您的任何帮助。

+0

我看不到你的代码中的任何阵列...只列出 2010-11-23 13:51:26

回答

6

基本上你需要,你要序列正在实施Serializable类。如果你想避免与串行相关的警告,你也应该为每个人设置一个long serialVersionUID,这是一个用于区分你的特定版本的类的代码。阅读像this one这样的教程以获得更多信息,序列化并不难以处理。

但是请记住,在两个不同版本的JVM之间使用序列化时存在错误(并且它通常存在一些缺陷)。

只是旁注:接口Serializable实际上并没有给类本身提供任何必需的特性(它不是典型的接口),它仅用于区分应该通过流发送的类和所有类其他。当然,如果一个类是Serializable,它所使用的所有组件(实例变量)也必须可序列化以便能够发送整个对象。

4

更改类声明:

类ProteinData 实现Serializable { ... }

1

我还以为最低限度,你就需要

类ProteinData 实现Serializable

私有静态最后的serialVersionUID长= 1234556L; (Eclipse会为你生成幻数)。 在课堂上。

相关问题