public static void read1() {
RandomAccessFile r = null;
try {
r = new RandomAccessFile(new File("D:/a.txt"),"r");
byte[] c = new byte[5];
r.read(c, 0, 5);//把这里的0换为其他整数就会出错,为什么,异常如下
System.out.println(new String(c));
} catch (Exception e) {
try {
r.close();
} catch (IOException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} }r.read(c, 0, 5);//把这里的0换为其他整数就会出错,为什么,异常如下:
java.lang.IndexOutOfBoundsException
at java.io.RandomAccessFile.readBytes(Native Method)
at java.io.RandomAccessFile.read(RandomAccessFile.java:322)
at Test.read1(Test.java:39)
at Test.main(Test.java:12)

解决方案 »

  1.   

     r.read(c, 0, 5);
    你的数组长度是5,比如你
     r.read(c, 1, 5);就是从数组下标1开始读5个字节,当然会报数组下标越界异常
      

  2.   

    数组越界了。
    c是用来保存你读入的数据的数组,偏移是针对这个c来说的。
    如果你的偏移=1,那么你读入的数据最大只能是4个byte,要是读5个的话就越界了。
    如果你的偏移=2,那么你读入的数据最大只能是3个byte,要是读5个的话就越界了。
    ……
    如果你想跳过几个字符,往下读的话,不应该使用这个方法。
      

  3.   

    请问大家 r.read(byte[] b,int off,int length);这里的偏移量off怎么理解,是表示从第几个字符开始读吗?怎么感到怪怪的?
      

  4.   

    比如文本中的内容为123456789;
    我想读取3456我该怎么做?我用r.read(c,2,4)不行啊.
      

  5.   

    off+len如果大于数组的长度,则抛出IndexOutOfBoundsException 你的off,len不为负数,然后和小于等于5就行了