我有一个用 Python 编写的程序,用于查找 TIFF IFD 中的特定标签并返回值。这只是 python 中的概念证明,现在我需要将功能转移到 java 中。我想我可以只对 ASCII 数据类型使用 String(byteArray[])
构造函数,但我仍然需要获取 Unsigned short (2 byte)
和 无符号长(4 字节)
值。我不需要将它们写回文件或修改它们,我需要做的就是从它们中获取一个 Java Integer
或 Long
对象。这在 python 中使用 struct
和 mmap
类很容易,有人知道 java 中的类似方法吗?我查看了 DataInput
类,但是 readUnsignedLong
方法读取了 8 个字节。
最佳答案
DataInputStream允许您阅读空头和多头。您应该使用适当的位掩码(简称为 0xFFFF
,对于 32 位为 0xFFFFFFFF
)来屏蔽它们,以解决有符号/无符号类型之间的差异。
例如
// omits error handling
FileInputStream fis = ...;
DataInputStream stream = new DataInputStream(fis);
int short_value = 0xFFFF & stream.readShort();
long long_value = 0xFFFFFFFF & stream.readInt();
如果您确定数据不会朝向 2 字节字段或 4 字节字段的高端,则可以放弃位屏蔽。否则,您需要使用更广泛的数据类型来说明无符号值比有符号值具有更大范围的值这一事实。
关于java - java 与 python 结构相似的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6111988/