2016-08-14 79 views
-1

在代码中,我使用字节缓冲区从2个整数中生成一个字节数组。当我尝试将数组写入输出流时,我得到一个ArrayIndexOutOfBounds异常。 OutputSteam中write(array,offset,length)方法的长度参数相信数组要小于数组的长度,即使我从数组本身传递属性也是如此。我通过编写虚拟数据来检查文件是否足够大,但我仍然得到相同的异常。字节数组长度不正确

OutputStream out = new FileOutputStream("File"); 
ByteBuffer buff = ByteBuffer.alocate(Integer.BYTES*2); 
buff.putInt(18); 
buff.putInt(32); 
byte[] array = buff.array(); 

out.write(array, 0, array.length); // Heres where the problem comes in 
+0

你的抵消是什么? –

+3

该代码不是有效的Java。如果你需要帮助,你需要发布失败的_actual_ Java代码,而不是你的解释。同时发布堆栈跟踪并指出变量的值,如'offset'。 –

+0

不,问题出现的时间比评论的时间早。目前,这是事实上,你张贴的代码甚至不会编译。 – GhostCat

回答

1

井,arrray有N个对象,最后目标是通过N-1索引,因为它从0开始Array.Length是N,并且希望N-1。

+0

'write'调用是完全有效的:'元素b [off]是写入的第一个字节,b [off + len-1]是这个操作写入的最后一个字节' –

+0

我已经试过了,没有快乐,甚至减去一半以上后 – Honin

+0

在这种情况下,我不知道。我认为这可能是“out”本身的问题。根据我的经验,解决问题的最佳方法是听错误或在线发布更多细节。 – Darkrifts

0

由于array.length为您提供字节数,因此在分配缓冲区时,要使用Integer.BYTES(每个整数的字节数)而不是Integer.SIZE(每个整数的位数)。

ByteBuffer buff = ByteBuffer.allocate(Integer.BYTES*2); 
buff.putInt(18); 
buff.putInt(32); 
byte[] array = buff.array(); 
+0

写入输出流时仍然会导致IndexOutOfBounds异常 – Honin