繁体   English   中英

序列化对象数组以通过套接字发送

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM