Почему нет 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:
как насчет того, является ли файл данных малозначным? нам сначала нужно сначала заменить биты?
Ответы
Ответ 1
Я бы сделал это вот так:
long l = file.readInt() & 0xFFFFFFFFL;
Операция бит необходима, потому что upcast будет показывать отрицательный знак.
Относительно понятия. Насколько мне известно, все операции ввода-вывода в Java выполняются по-разному. Конечно, часто это не имеет значения (байт-массивы, кодировка UTF-8 и т.д. Не зависят от сущности), но многие методы DataInput
. Если ваш номер хранится в маленьком значении, вам нужно его самостоятельно преобразовать. Единственное средство стандартного Java, которое я знаю об этом, позволяет настроить endianness ByteBuffer
с помощью метода order()
, но затем вы открываете ворота в NIO, и у меня нет большого опыта с этим.
Ответ 2
Отредактировано для удаления readLong()
:
Вы можете использовать readFully(byte[] b, int off, int len)
, а затем преобразовать в Long
с помощью методов здесь: Как преобразовать массив байтов в его числовое значение (Java)?
Ответ 3
Потому что в java нет типа unsigned int.
Почему бы не readLong()
?
Вы можете читать дальше, а затем принимать первые 32 бита.
Edit
Вы можете попробовать
long value = Long.parseLong(Integer.toHexString(file.readInt()), 16);
Ответ 4
В зависимости от того, что вы делаете с int
, вам может не понадобиться превращать его в длинный. Вам просто нужно знать о выполняемых вами операциях. После всего всего лишь 32 бит, и вы можете рассматривать его как подписанный или неподписанный, как вы пожелаете.
Если вы хотите играть с ByteOrder, проще всего использовать ByteBuffer, который позволяет вам установить порядок байтов. Если ваш файл меньше 2 ГБ, вы можете отобразить весь файл в память и случайно получить доступ к ByteBuffer.