首先2个文件 一个dat.txt 一个TestBufferStream.java 就这2文件,先编译然后帮我测试
dat是我自己创建的一个文件里面的内容如下
dat.txt-内容
System.out.printlnSystem.out.printlnSystem.out.println (就这么多)
然后看java源文件
import java.io.*;
public class TestBufferStream1
{
public static void main(String args[]) {
try{
FileInputStream fis = new FileInputStream("C://dat.txt"); //这里声明了一个FileInputStream准备从里面往外读数据
BufferedInputStream bis = new BufferedInputStream(fis); //把fis传进来
int c = 0;
System.out.println(bis.read());//这是读取一个字节
System.out.println(bis.read());
bis.mark(8); //直接标记到100的地方 从100的地方读
//问的问题主要就是这个InputStream的mark方法. 它的作用是 在输入流中标记当前的位置..,,,, 你看看我在此标记的是第8个位置,,然后在写下面的程序从第8个位置开始读取
for(int i = 0; i < 3 && (c = bis.read()) != -1; i++) {//这个也很简单 读取3个,,
System.out.print((char)c + ""); // 转换字符 加强制转换
}
System.out.println();
bis.reset(); //回到刚才标记 回到8 的这个点上...和上面的mark是一伙的,,
//显然2个for循环是打印一样的
for(int i = 0; i < 3 && (c = bis.read()) != -1; i++) {
System.out.print((char)c + "");
}
bis.close();//然后关闭
}catch(IOException e) {//这是异常...
e.printStackTrace();
}
}
}
前面2个打印的肯定是 S y...是直接读取
问题就是我标记的mark的位置是8.,就是从第8个开始读,,从上面看dat.txt第8个打印的应该是 o u t,,, 可是 老是打印 S y 后面的 应该是t e m ,,,就好像我声明的mark什么用也没有。。。。。。下面reset也是一样,,,就只打印tem,,应该是o u t 啊,,
这是我自己理解,是程序写错了,还是我没理解mark方法,,,请哥哥姐姐指点一下,是在是急了,,我QQ515905107