在 Java 中,所有原始类型都是有符号的(奇怪的是甚至是字节!)。因此,如果您想在 Java 中使用DataInputStream.readInt()
. 另请注意, readInt() 使用大端。您可以使用 Jon Skeets MiscUtils的 EndianBinaryReader 之类的东西来编写这些,以便可以在 Android 上读取。
UTF-8 有点棘手,因为DataInputStream
它使用称为 MUTF-8 (Modified UTF-8) Encoding 的字符串编码。在我们用于在 android 和 .net 之间共享数据的代码中,我们使用一个简单的运行长度编码的 UTF-8 字节来表示一个字符串(-1 为空)。我们在 Java 中的 reader 方法看起来像这样从 C# BinaryWriter 读取标准 UTF-8 编码的字符串(在第一次写出 Int16 长度之后):
public String readUTF8String() throws ImageFileFormatException, IOException
{
short len = readInt16();
if (len == -1)
return null;
if (len == 0)
return "";
if (len < -1)
throw new ImageFileFormatException("Invalid UTF8 string");
byte[] utf8Bytes = readBytes(len);
return new String(utf8Bytes, "UTF-8");
}