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

标签 java arrays sockets serialization object

我有一个从数据库 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/

相关文章:

java - Android 如何识别 GS1 DataBar 条形码?

java - org.apache.jmeter.util.HostNameSetter 抛出的 JMeter 异常

javascript - javascript可以接收套接字请求吗?

mysql - Cloud SQL 代理错误 - 尝试以其访问权限禁止的方式访问套接字

java - 如何在 Java 中检索外部 .properties 文件?

java - 数组仅填充最后一个元素

c# - 如何添加和获取我所有的数据库表值(数字)并显示总量? C#

php - ARRAY PHP 如何将变量放入数组中

java - 查找已排序的一维数组中元素的最近/最接近的较低值

javascript - 使用 socket node.js 检测用户切换页面