关于RandomAccessFile的read(c, 0, 5)方法的疑问,请帮忙!

plplum 2009-09-10 04:44:18

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)



...全文
438 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
windforcecn 2009-09-10
  • 打赏
  • 举报
回复
off+len如果大于数组的长度,则抛出IndexOutOfBoundsException

你的off,len不为负数,然后和小于等于5就行了
plplum 2009-09-10
  • 打赏
  • 举报
回复
比如文本中的内容为123456789;
我想读取3456我该怎么做?我用r.read(c,2,4)不行啊.

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

引用楼主 plplum 的回复:
Java codepublicstaticvoid read1() {
        RandomAccessFile r=null;try {
            r=new RandomAccessFile(new File("D:/a.txt"),"r");byte[] c=newbyte[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)



[/Quote]
plplum 2009-09-10
  • 打赏
  • 举报
回复
请问大家 r.read(byte[] b,int off,int length);这里的偏移量off怎么理解,是表示从第几个字符开始读吗?怎么感到怪怪的?

[Quote=引用楼主 plplum 的回复:]
Java codepublicstaticvoid read1() {
RandomAccessFile r=null;try {
r=new RandomAccessFile(new File("D:/a.txt"),"r");byte[] c=newbyte[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)



[/Quote]
bayougeng 2009-09-10
  • 打赏
  • 举报
回复
数组越界了。
c是用来保存你读入的数据的数组,偏移是针对这个c来说的。
如果你的偏移=1,那么你读入的数据最大只能是4个byte,要是读5个的话就越界了。
如果你的偏移=2,那么你读入的数据最大只能是3个byte,要是读5个的话就越界了。
……
如果你想跳过几个字符,往下读的话,不应该使用这个方法。
loveofmylife 2009-09-10
  • 打赏
  • 举报
回复
r.read(c, 0, 5);
你的数组长度是5,比如你
r.read(c, 1, 5);就是从数组下标1开始读5个字节,当然会报数组下标越界异常

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧