首页 > 解决方案 > 以与机器无关的方式读取数据是什么意思?

问题描述

  1. DataInputStream 类的文档说它能够以独立于机器的方式读取数据,这到底是什么意思?
  2. 这是否意味着它将接收完全相同的数据,而不管 Socket 通信的另一端是用什么编程语言编写的?
  3. DataInputStream 对读取从用其他语言编写的应用程序/程序发送的原语是否有用(例如,如果 C 应用程序正在发送而 Java 应用程序正在接收),如果不是,哪个类会?

标签: javasockets

解决方案


DataInputStream 对字节序列起作用。当它从这样的序列中读取更大的值时,它使用固定的解释。例如,当读取需要 4 个字节的 int 时,它以大端格式读取它们。也就是说,如果字节流包含0x01 0x23 0x45 0x67,则 DataInputStream 会将其读取为整数0x01234567

简而言之,它使用固定的字节序而不是依赖于平台的字节序。

另外,它定义了几种数据类型的确切大小和表示,其大小取决于其他编程语言的执行环境。例如,int C 类型至少int16 位宽,而 Java 将其定义为32 位宽,Java 的 DataInputStream 也是如此。

当您需要在 Java 程序之间交换数据时,DataInputStream 非常有用。如果您需要在不同的编程语言之间交换数据,您应该使用在所有相关编程语言中实现的另一个库。也许是谷歌的 protobuf。或者,如果您的数据是文本数据,请使用 JSON 或 XML。


推荐阅读