我的工作一些网络与Java和我有一个对象转换为一个字节数组,分割该阵列分成2份,发送每个通过TCP流,接收它,重建所述的问题字节数组,然后重新对象。爪哇 - 无效流头
到目前为止,这一切都工作。除了对象的重建之外,我拥有所有这些。使用ObjectInputStream时出现此错误:
java.io.StreamCorruptedException: invalid stream header: 34323435
这是我在线看到的常见错误。我试图修复它。我听说的原因之一是在发送字节后流不会被刷新,但是我的代码在发送之前确实会流水。我的代码发送数据是:
public void sendTcp(ObjectOutputStream tcpOut) {
try {
synchronized(tcpOut) {
tcpOut.write(data);
tcpOut.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
而且我能够成功读取服务器端的这些字节。将这些字节组合在一起时会出现问题。一旦完成,我用它来重新创建对象:
ByteArrayInputStream in = new ByteArrayInputStream(data);
ObjectInputStream is = new ObjectInputStream(in);
Object object = is.readObject();
is.close();
in.close();
但是在ObjectInputStream行上会抛出错误。我也通过调试查看了原始数据,并且它们都匹配起来。对象的字节在被拆分并发送之前,与接收后重新组合的字节相匹配。我一直坚持这一点,如果有人可以帮助,这将是非常有益的。
你能够建立基于相同的字节在客户端的对象? –
我已经尝试过,但是我所做的是首先创建一个新的ByteArrayOutputSteam,然后创建一个新的ObjectOutputStream,然后编写该对象并获取该对象的字节。然后我冲洗并关闭这些流。然后我把这个数组分成几部分,然后通过连接到Socket输出流的ObjectOutputStream发送每个数组(对于套接字只有一个对象输出流,我不重新创建它)。然后我在服务器端接收它并将这些阵列放在一起。 – Jmrapp
然后我把那个单个数组发送给一个新的ByteArrayInputStream,然后把它发送给一个新的ObjectInputStream。然后我使用它来获取对象,但它创建ObjectInputStream时会引发该错误 – Jmrapp