我通过跳过2次从文件中读取字符
fis = new FileInputStream("C:/data/25130.in ");
fis.skip(24305);//This position contains _(UnderScore)
l=fis.read();
fis.skip(24312);//This position also contains _(Underscore)
i = fis.read();
ch= (char)l;
c = (char)i;
System.out.print("Ch: "+ch);//Returns Underscore
System.out.print("C: "+c); // Returns 9 instead of UnderScore
如果我删除了第一个跳过,如下所示
fis = new FileInputStream("C:/data/25130.in ");
fis.skip(24312);//This position also contains _(underscore)
i = fis.read();
c = (char)i;
System.out.print("C: "+c); // Now it returns Underscore
我打算在2个位置阅读2个字符。问题出在哪里
答案 0 :(得分:2)
fis.skip(24312)
跳过许多字符(它读取24312个字节并将它们扔掉......)
你想要做的是“定位”输入流,只扔掉(24312 - 24305)个字节,或fis.skip(7)
编辑:嗯,lutzh是对的,你想要fis.skip(6)
但是......
你真正想做的是使用RandomAccessFile并使用搜索(位置)方法......
答案 1 :(得分:0)
我认为FileInputStream.skip没有到达给定位置,它会跳过给定的字节数。因此,在你的第二次跳过之后,你将最终得到48617,再加上你实际读过的一次。
尝试6作为第二次跳过的参数。