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

标签 java exception serialization tcp datainputstream

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

这是代码片段:

发送函数:

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);

这是行不通的。我收到以下异常:

无效的流 header :07F8ACED java.io.StreamCorruptedException:无效的流 header :07F8ACED

请告诉我我应该怎么做。

最佳答案

使用ObjectOutputStream 写入对象,使用ObjectInputStream 读取对象。

关于java - 如何在 java 中通过 TCP 连接发送序列化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5046185/

相关文章:

tomcat - 如何将用于 java 类路径的库链接起来?

java - HttpUrlConnection block 大小和视频文件

python - 为什么 python 异常通常不打印违规值?

c# - 应用异常问题

ruby-on-rails - 序列化自定义属性

Java 正则表达式模式将日期格式拉至第一个正斜杠

没有服务器的 Java 持续集成

java - 抛出和捕获异常

java - 在存在序列化的情况下理解 Java 内存模型下的一个棘手案例

C++:如何保存与平台无关的二进制文件?