StreamCorruptedException,包含ObjectInputStream上的大量数据

时间:2012-08-09 18:30:18

标签: java corruption objectinputstream

我在TCP上设置了服务器 - 客户端,客户端正在向服务器发送大量数据集。读/写使用ObjectInput / OutputStream。我在正常情况下没有任何问题,但是当数据流变重时,我得到一个StreamCorruptedException:无效的类型代码。无效代码每次都不同。我打开套接字一次并调用synchronized方法从多个线程发送数据。

客户端:

socket = new Socket("localhost", sockNum);
out = new ObjectOutputStream(socket.getOutputStream());
in = new ObjectInputStream(socket.getInputStream());

public synchronized void sendMsg(Message msg){
    try{
        out.writeObject(security.signObject(msg, privKey));
        out.reset();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

服务器:

ServerSocket server = new ServerSocket(sockNum);
Socket client = server.accept();
ObjectInputStream in = new ObjectInputStream(client.getInputStream());

while(threadActive){
    Object line = in.readObject();
    handleObject(line);
}

更新:我在每次发送后添加了out.reset(),但这没有帮助解决问题。我还在循环中添加了睡眠状态以降低数据速率。这消除了错误,但不是真正的解决方案。

编辑:所以自从我最初问这个问题以来已经有一段时间了,但我又遇到了问题。我尝试设置我的系统,以便在每个发送的消息之后,线程等待“确认”消息作为回报。如果接收进程具有StreamCorruptedException,则它会发回“重新发送”而不是ack。这似乎比解决方案引起更多问题。还有其他想法吗?

1 个答案:

答案 0 :(得分:2)

听起来您正在以多线程方式写入输出流,即您正在写入除示例之外的其他位置。

BTW:您是否定期重置()流以防止内存泄漏?