类似的功能java to struct for python

kee*_*l89 5 python java tiff image

我有一个用Python编写的程序来查找TIFF IFD中的特定标记并返回值.它只是python中的概念验证,现在我需要将功能移到java.我想我可以使用String(byteArray[])ASCII数据类型的构造函数,但我仍然需要获取Unsigned short (2 byte)unsigned long (4 byte)值.我不需要将它们写回文件或修改它们,我需要做的就是从它们获取Java IntegerLong对象.这在使用structmmap类的python中很容易,在java中有没有人知道类似的方法?我查看了DataInput该类,但该readUnsignedLong方法读取了8个字节.

I82*_*uch 5

DataInputStream允许您读取short和long.您应该使用适当的位掩码(0xFFFF简称0xFFFFFFFF32位)对它们进行掩码,以便考虑有符号/无符号类型之间的差异.

例如

// omits error handling
FileInputStream fis = ...;
DataInputStream stream = new DataInputStream(fis);
int short_value = 0xFFFF & stream.readShort();
long long_value = 0xFFFFFFFF & stream.readInt();
Run Code Online (Sandbox Code Playgroud)

如果您确定数据不会朝向2字节字段的高端或4字节字段,则可以放弃位屏蔽.否则,您需要使用更宽的数据类型来解释无符号值比其签名对应值保留更大范围的值这一事实.