![](/img/trans.png)
[英]Why DataInput interface in Java doesn't have readUnsignedInt method
[英]Why no readUnsignedInt in RandomAccessFile class?
我刚刚发现RandomAccessFile
类中没有readUnsignedInt
()方法。 为什么? 是否有任何解决方法从文件中读取unsigned int?
编辑:
我想从文件中读取unsigned int并将其放入一个长空间。
EDIT2:
不能使用readLong()。 它将读取8个字节而不是4个字节。 文件中的数据在4字节范围内具有无符号整数。
EDIT3:
在这里找到答案: http : //www.petefreitag.com/item/183.cfm
Edit4:
如果数据文件是little-endian怎么样? 我们需要先换位?
我这样做:
long l = file.readInt() & 0xFFFFFFFFL;
位操作是必要的,因为向上扩展将延伸一个负号。
关于字节序。 据我所知,Java中的所有I / O都是以大端方式完成的。 当然,通常无关紧要(字节数组,UTF-8编码等不受字节顺序影响),但DataInput
方法很多。 如果您的号码以小端存储,则必须自行转换。 我所知道的标准Java中唯一的工具允许通过order()
方法配置字节顺序是ByteBuffer
,但是你打开NIO的门,我没有很多经验。
编辑删除readLong()
:
您可以使用readFully(byte[] b, int off, int len)
然后使用以下方法转换为Long
: 如何将字节数组转换为其数值(Java)?
因为java中没有unsigned int类型? 为什么不readLong()
? 你可以读取Long然后取32位。
编辑你可以试试
long value = Long.parseLong(Integer.toHexString(file.readInt()), 16);
根据您使用int
,您可能不需要将其转换为long。 您只需要知道您正在执行的操作。 在它只有32位后,您可以根据需要将其视为有符号或无符号。
如果你想使用ByteOrder,最简单的方法是使用ByteBuffer,它允许你设置一个字节顺序。 如果文件小于2 GB,则可以将整个文件映射到内存中并随机访问ByteBuffer。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.