如何使用ObjectOutputStream读/写不同的类型

时间:2015-05-21 00:42:41

标签: java io server inputstream outputstream

我希望能够使用我的对象输入/输出流在服务器和客户端之间发送布尔值,UTF和对象。独立地我发送一个字符串或布尔值没有问题但是当我在while循环中有两个线程时,一个做.readBoolean和另一个.readUTF错误被抛出。我可以看出为什么这种方式不起作用,但我无法弄清楚正确的方法。

如何通过流发送不同类型?是否需要多个端口,或者我可以使用相同的流进行多个端口吗?

2 个答案:

答案 0 :(得分:0)

您可能会注意到readXYZ中的ObjectInputStream方法与writeXYZ中的ObjectOutputStream方法相对应。

每对方法读取或写入特定格式。如果您使用writeBoolean(写入单个字节)编写内容,则必须使用readBoolean进行读取。如果您使用writeObject(编写序列化对象)编写内容,则必须使用readObject进行阅读。尝试将序列化的Boolean对象解释为单字节布尔值将不起作用。

答案 1 :(得分:0)

  

当我在while循环中有两个线程时,一个执行.readBoolean,另一个.readUTF错误被抛出。我可以理解为什么这种方式不起作用,但我无法弄清楚正确的方法。

没有正确的方法。从同一个套接字读取的两个线程永远不会起作用。

  

如何通过流发送不同的类型?

你在做。你的问题不是类型,而是并发。

  

是否需要多个端口

可能,但你没有告诉我们你的要求是否确定。

  

或者我可以使用相同的流进行一次吗?

在一个流上执行它,但是你遇到了并发问题。 stmrea本身的内容没有明确定义,两个线程的读取顺序也不明确。你不能这样做。重新思考,重新设计,重新实施。