Подтвердить что ты не робот

Почему нет readUnsignedInt в классе RandomAccessFile?

Я только что нашел, что в классе RandomAccessFile нет метода readUnsignedInt(). Зачем? Есть ли способ обхода, чтобы прочитать unsigned int из файла?

Edit:

Я хочу прочитать unsigned int из файла и поместить его в длинное пространство.

Edit2:

Невозможно использовать readLong(). он будет читать 8 байт, а не 4 байта. данные в файле имеют unsigned ints в диапазоне 4 байта.

Edit3:

Найден ответ здесь: http://www.petefreitag.com/item/183.cfm

Edit4:

как насчет того, является ли файл данных малозначным? нам сначала нужно сначала заменить биты?

4b9b3361

Ответ 1

Я бы сделал это вот так:

long l = file.readInt() & 0xFFFFFFFFL;

Операция бит необходима, потому что upcast будет показывать отрицательный знак.


Относительно понятия. Насколько мне известно, все операции ввода-вывода в Java выполняются по-разному. Конечно, часто это не имеет значения (байт-массивы, кодировка UTF-8 и т.д. Не зависят от сущности), но многие методы DataInput. Если ваш номер хранится в маленьком значении, вам нужно его самостоятельно преобразовать. Единственное средство стандартного Java, которое я знаю об этом, позволяет настроить endianness ByteBuffer с помощью метода order(), но затем вы открываете ворота в NIO, и у меня нет большого опыта с этим.

Ответ 3

Потому что в java нет типа unsigned int. Почему бы не readLong()? Вы можете читать дальше, а затем принимать первые 32 бита.

Edit Вы можете попробовать

long value = Long.parseLong(Integer.toHexString(file.readInt()), 16);

Ответ 4

В зависимости от того, что вы делаете с int, вам может не понадобиться превращать его в длинный. Вам просто нужно знать о выполняемых вами операциях. После всего всего лишь 32 бит, и вы можете рассматривать его как подписанный или неподписанный, как вы пожелаете.

Если вы хотите играть с ByteOrder, проще всего использовать ByteBuffer, который позволяет вам установить порядок байтов. Если ваш файл меньше 2 ГБ, вы можете отобразить весь файл в память и случайно получить доступ к ByteBuffer.