如何在java中通过TCP连接发送序列化数据

时间:2011-02-18 20:26:02

标签: java exception serialization tcp datainputstream

我想发送通过TCP连接序列化的数据。 我创建了一个客户端/服务器连接,并在序列化后发送一个Object。 但是,我不知道应该如何阅读数据。

这是代码段:

发送功能:

sendTo(String receiverAddr, int receiverPort,....., Object data) {
.
.
.
  if (data != null) { 
    byte[] byteObj = programming5.io.Serializer.serializeBytes(data);
    output.writeInt(byteObj.length);
    output.write(byteObj, 0, byteObj.length);
    output.flush();
  }
  output.close();
  sock.close();
}

函数调用:

String hostname = somevalue;
int portNo = somevalue;
Hashtable <Integer, Integer> object = somevalue;

sendTo(hostname,portNo,...,object);

接收功能:

DataInputStream input = new DataInputStream(clientSocket.getInputStream());

int length = input.readInt();
byte[] bytes = new byte[length];
input.readFully(bytes);

Hashtable<Integer, Integer> recvObj = (Hashtable<Integer,Integer)programming5.io.Serializer.deserialize(bytes);

这不起作用。我得到以下例外:

无效的流标头:07F8ACED java.io.StreamCorruptedException:无效的流标题:07F8ACED

请告诉我应该怎么做。

1 个答案:

答案 0 :(得分:3)

使用ObjectOutputStream来编写对象,使用ObjectInputStream来阅读它们。