c# 中的 readInt16() 与 java 中的 readShort()

Posted

技术标签:

【中文标题】c# 中的 readInt16() 与 java 中的 readShort()【英文标题】:readInt16() in c# vs readShort() in java 【发布时间】:2017-09-14 02:31:22 【问题描述】:

我正在用 java 读取一个二进制文件(用 c# 编写)。它是一个超过 360Kb 的长文件。我必须逐字节读取代码以填充字段。 我们已经阅读了已经在 c# 中实现的代码,并且必须复制该行为。在c#中,代码是这样的

FileVersion = s.ReadByte()
FileVersionMinor = s.ReadByte()
HeaderLength = s.ReadInt16()

现在我正在尝试在 java 中做与上面相同的操作

dis = new DataInputStream(fin);
fileVersionMajor = dis.readUnsignedByte()
def fileVersionMinor = dis.readUnsignedByte()
def headerLength = dis.readShort()

但我得到不同的输出,当我试图深入研究问题时,我看到 java 代码在 streambyte 的末尾附加了 00000000。

这里有什么问题?

PS 如果我这样做 def headerLength = dis.readByte(), 我得到了预期值。

【问题讨论】:

在Java中没有def关键字作为C#的var,也许你的意思是Scala(需要重新标记到[scala])? 【参考方案1】:

您可能需要使用readByte() 而不是readUnsignedByte()

【讨论】:

你错了,ReadByte() 给出了 unsigned int 所以 readUnsignedByte()

以上是关于c# 中的 readInt16() 与 java 中的 readShort()的主要内容,如果未能解决你的问题,请参考以下文章

Java.io.DataInputStream.readInt()

使用 BinaryReader 解析 Wave 文件

Algs4-1.2.15基于String的split()的方法实现In中的静态方法readInts()

Java返回命令[关闭]

buf.readInt32LE函数详解

swift readInts.swift