DataInputStream позволяет читать короткие и длинные. Вы должны замаскировать их соответствующей битовой маской (0xFFFF
для краткости, 0xFFFFFFFF
для 32-битной), чтобы учесть разницу между типами со знаком и без знака.
, например
// omits error handling
FileInputStream fis = ...;
DataInputStream stream = new DataInputStream(fis);
int short_value = 0xFFFF & stream.readShort();
long long_value = 0xFFFFFFFF & stream.readInt();
Если вы уверены, что данные не будут находиться в верхнем конце 2-байтового поля или 4-байтового поля, вы можете отказаться от битовой маскировки. В противном случае вам необходимо использовать более широкий тип данных, чтобы учесть тот факт, что значения без знака содержат больший диапазон значений, чем их подписанные аналоги.