2010-02-04 62 views
3

我正在编写一些数据访问测试实现,我需要随机访问文件内容。代码如下:为什么RandomAccessFile使用int作为偏移量

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) 

如何覆盖此问题?

回答

15

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

write中的偏移量是数组中的偏移量。数组有int偏移量。有人提出了“长阵列”的建议,但是这些实施,你仍然需要超载。

NIO中的映射文件有一个问题,因为某些原因,等效MappedByteBuffer.position只使用int。见CR 6347833(9票)。

+1

+1。有趣的是,作为Java唯一的mmap接口的JDK“MemoryMappedBuffer”只在其position()方法中使用了'int',这与OP所关心的方式相似。去搞清楚。 – 2010-02-04 16:30:38

+0

是的,我打算去看看...... – 2010-02-04 16:37:07

+0

那么,它不是文件内的偏移量?然后int是好的,我会alwasy调用.seek(),谢谢。 – 2010-02-05 12:36:03

相关问题