【问题标题】:Why does RandomAccessFile use int as offset为什么 RandomAccessFile 使用 int 作为偏移量
【发布时间】:2010-02-04 16:09:24
【问题描述】:

我正在编写一些数据访问测试实现,我需要随机访问文件内容。代码如下:

RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rwd");
final byte b[] = IOUtils.toByteArray(source);
randomAccessFile.write(b, (int) offset, size);

其中 offset 的类型为 long。 为什么 RandomAccessFile 不提供方法:

public void write(byte b[], long off, int len)

?

如何解决这个问题?

【问题讨论】:

    标签: java int long-integer random-access


    【解决方案1】:

    我认为您正在寻找seek 方法。

    write 中的偏移量是数组的偏移量。数组有int 偏移量。已经有人提出了“长数组”的建议,但是如果这些实现了,你仍然需要一个重载。

    NIO 中的映射文件存在一个问题,即等效的MappedByteBuffer.position 出于某种原因仅使用int。见CR 6347833(9 票)。

    【讨论】:

    • +1。有趣的是,JDK MemoryMappedBuffer 是 Java 对 mmap 的唯一接口,它在其 position() 方法中只采用了一个 int,这使得它有点像 OP 所关心的那样懦弱。去图吧。
    • 那么,这不是文件中的偏移量吗?然后 int 就可以了,我会一直调用 .seek(),谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多