Java 覆盖使用DataOutputStream写入的文件中的数据-IndexOutfBoundsException-write方法中的“off”参数是什么?

Java 覆盖使用DataOutputStream写入的文件中的数据-IndexOutfBoundsException-write方法中的“off”参数是什么?,java,Java,我使用RandomAccessFile的方法write来实现这一点,但以下代码在第3行抛出IndexOutOfBoundsException: RandomAccessFile raf = new RandomAccessFile(this.dbFileName, "rw"); raf.seek(position); raf.write(data[0].getBytes(), 0, FieldLength.NAME.value); raf.write(data[1].getBytes(), 0,

我使用RandomAccessFile的方法write来实现这一点,但以下代码在第3行抛出IndexOutOfBoundsException:

RandomAccessFile raf = new RandomAccessFile(this.dbFileName, "rw");
raf.seek(position);
raf.write(data[0].getBytes(), 0, FieldLength.NAME.value);
raf.write(data[1].getBytes(), 0, FieldLength.LOCATION.value);
// etc
FieldLength.NAME是int类型的枚举

方法writebyte[]b中的off参数是什么,int off,int len?文档中仅显示off-数据中的起始偏移量。它是相对于文件指针的位置吗?在前一行中,随着方法seeklong pos的执行,它发生了更改

我在DataOutputStream类中没有找到任何类似的方法


JDK是6。

问题是数据数组没有两个元素。第三行的异常表示它甚至没有一个元素,或者返回的getBytes没有返回足够的数据。你需要检查一下这个。第二个问题也可以通过相应地填充数据(可能是字符串)来解决

您是如何填充数据数组的?偏移量是跳过字节数组中的一些字节。使用DataInputStream读取文件,然后我将字段值及其记录编号和数据本身放入映射中。当读取此映射时,程序填充一个数组。这是一个包含32个元素的数组,我通过调试对其进行了验证。此外,确实存在返回的数据。稍后我将尝试user987339的提示。数据,是的,有一些,好的。但是有足够的数据吗?我的意思是,数据[0].getBytes.length>=FieldLength.NAME.value吗?如果您试图写入固定格式文件,并且数据数组中有字符串,则需要将字符串填充到所需的长度,即FieldLength.NAME.value或FieldLength.LOCATION.value。顺便说一句,它看起来像Java认证的开发人员分配-另一个提示和我说的一样-该字段的大小为64,但数据长度始终小于64。我想这就是问题所在。我将使用StringBuilder来填充剩余的空间,这些空间已经插入了数据。是的,这是Java作业。