0

我通过跳过 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 个字符。问题出在哪里

4

2 回答 2

2

fis.skip(24312)跳过那么多字符(它读取 24312 个字节并将它们扔掉......)

您想要做的是“定位”输入流,并且只丢弃 (24312 - 24305) 个字节,或者fis.skip(7)

编辑:嗯,lutzh 是对的,你想fis.skip(6)但是....

你真正想做的是使用RandomAccessFile并使用 seek(position) 方法......

于 2013-10-22T10:31:21.413 回答
0

我认为 FileInputStream.skip 不会到达给定的位置,它会跳过给定的字节数。因此,在您第二次跳过之后,您最终将获得 48617,再加上您实际阅读的内容。

尝试 6 作为第二次跳过的参数。

于 2013-10-22T10:33:08.993 回答