在不知道输出类型的情况下从 DataInputStream 读取

发布于 2024-11-05 10:27:37 字数 153 浏览 1 评论 0原文

假设我正在使用 DataInputStream 接收数据,但我不知道是否应该使用(例如)readUTFreadInt 或 <代码>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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

负佳期 2024-11-12 10:27:37

不,没有机制可以通过内省流来找出此信息。如果您需要执行此操作,则发送方需要将元数据添加到流中,指示接下来要发送的数据类型。

例如,发送方可以发送 0 字节(这可能是“下一个数据项是 int”的信号),然后发送 int,然后发送一个 1 字节(“下一个数据项是 long”的信号),后跟 long本身。

消费者将读取信号,并知道是否调用 readInt 或 readLong 。

或者,您可以使用 ObjectInputObjectOutput 而不是 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 an int"), and then send the int, then send a 1 byte (the signal for "the next data item is a long"), followed by the long itself.

The consumer would read off the signals, and know whether to call readInt or readLong.

Alternatively, you can use ObjectInput and ObjectOutput instead of DataInputStream, which performs the introspection for you (if you use writeObject() and readObject()).

束缚m 2024-11-12 10:27:37

不,这都是原始的二进制数据。除非您指定您的期望,否则一切都是一样的。

No. It is all a raw binary data for it. Unless you specify what you expect, it is all the same for it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文