在不知道输出类型的情况下从 DataInputStream 读取
假设我正在使用 DataInputStream
接收数据,但我不知道是否应该使用(例如)readUTF
、readInt
或 <代码>readLong。有没有一种方法可以告诉我另一边写入了什么类型的数据?
Say i'm using DataInputStream
to recieve data, but I don't know if I should use (for example) readUTF
, readInt
or readLong
. Is there a method that tells me what type of data is written on the other side?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,没有机制可以通过内省流来找出此信息。如果您需要执行此操作,则发送方需要将元数据添加到流中,指示接下来要发送的数据类型。
例如,发送方可以发送
0
字节(这可能是“下一个数据项是int
”的信号),然后发送int
,然后发送一个1
字节(“下一个数据项是long
”的信号),后跟long
本身。消费者将读取信号,并知道是否调用 readInt 或 readLong 。
或者,您可以使用
ObjectInput
和ObjectOutput
而不是DataInputStream
,它会为您执行内省(如果您使用writeObject()< /code> 和
readObject()
)。No, there's no mechanism to introspect the stream to find out this information. If you need to do this, then the sender needs to add meta-data to the stream indicating what sort of data is coming next.
For example, the sender can send a
0
byte (which could be a signal for "the next data item is anint
"), and then send theint
, then send a1
byte (the signal for "the next data item is along
"), followed by thelong
itself.The consumer would read off the signals, and know whether to call
readInt
orreadLong
.Alternatively, you can use
ObjectInput
andObjectOutput
instead ofDataInputStream
, which performs the introspection for you (if you usewriteObject()
andreadObject()
).不,这都是原始的二进制数据。除非您指定您的期望,否则一切都是一样的。
No. It is all a raw binary data for it. Unless you specify what you expect, it is all the same for it.