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

Java 如何使用ObjectOutputStream读/写不同的类型,java,io,server,inputstream,outputstream,Java,Io,Server,Inputstream,Outputstream,我希望能够使用我的对象输入/输出流在服务器和客户端之间发送布尔值、UTF和对象。单独发送字符串或布尔值没有问题,但是当我在while循环中有两个线程时,会抛出一个doing.readBoolean和另一个.readUTF错误。我可以理解为什么这种方法行不通,但我想不出正确的方法 如何通过流发送不同的类型?是否需要多个端口,或者我可以使用同一个流在一个端口上执行此操作?您可能会注意到ObjectInputStream中的readXYZ方法对应于ObjectOutputStream中的writeXY

我希望能够使用我的对象输入/输出流在服务器和客户端之间发送布尔值、UTF和对象。单独发送字符串或布尔值没有问题,但是当我在while循环中有两个线程时,会抛出一个doing.readBoolean和另一个.readUTF错误。我可以理解为什么这种方法行不通,但我想不出正确的方法


如何通过流发送不同的类型?是否需要多个端口,或者我可以使用同一个流在一个端口上执行此操作?

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

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

当我在while循环中有两个线程时,抛出了一个doing.readBoolean和另一个.readUTF错误。我可以理解为什么这种方法行不通,但我想不出正确的方法

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

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

你做到了。你的问题不是类型,而是并发性

是否需要多个端口

可能吧,但你还没有告诉我们你的要求,所以不能确定

或者我可以用同一个流在一个上面做吗


您正在通过一个流执行此操作,但是您遇到了并发问题。stmrea本身的内容没有很好的定义,两个线程的读取顺序也没有很好的定义。你不能这样做。重新思考、重新设计、重新实施。

为什么要通过流发送两个对象?发送一个具有两个值的对象。。。例如,创建一个名为anything的新对象,并使用ojbectstream发送任何内容,并通过((anything)receivedobject.getString()读取对象;和((任何内容))receivedobject.getBoolean();这两种方法都适用于任何事物class@YaWang我现在有点像这样设置,在我弄清楚如何做我想做的事情之前,我只是发送带有识别前缀的字符串。如果我找不到合适的方法,我可能会像你的想法那样做though@TheAwkwardChild然后你必须发送一些东西来说明下一个东西是布尔值还是字符串。或者您可以使用自动处理类型的
readObject
/
writeObject
(然后使用
instanceof