从DataInputStream读取而不知道输出类型

yot*_*moo 0 java stream

假设我DataInputStream用来接收数据,但我不知道是否应该使用(例如)readUTF,readInt或者readLong.有没有一种方法可以告诉我在另一边写了什么类型的数据?

ska*_*man 5

不,没有机制可以反省流来查找这些信息.如果您需要这样做,那么发件人需要将元数据添加到流中,以指示接下来将采用何种数据.

例如,发送方可以发送一个0字节(可能是"下一个数据项为"的信号int),然后发送int,然后发送一个1字节("下一个数据项为"的信号long),然后靠long自己.

消费者会读取信号,并知道是否打电话readIntreadLong.

或者,您可以使用ObjectInputObjectOutput不是DataInputStream为您执行内省(如果您使用writeObject()readObject()).