繁体   English   中英

为什么RandomAccessFile类中没有readUnsignedInt?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM