import java.io.*;
public class TestBufferStream{
public static void main(String arg[]){
try{
int r=0;
FileInputStream in=new FileInputStream("d:/java/io/TestBufferStream.java");
BufferedInputStream bin=new BufferedInputStream(in);
System.out.println((char)bin.read());
System.out.println((char)bin.read());
// System.out.println(bin.markSupported());
bin.mark(20);
System.out.println((char)bin.read());
for(int i=0;i<=10&&(r=bin.read())!=-1;i++){
System.out.print((char)r);
}
bin.reset();
System.out.println();
for(int i=0;i<10&&(r=bin.read())!=-1;i++){
System.out.print((char)r);
}
in.close();
bin.close();
}catch(FileNotFoundException e){
System.out.println("文件没找到");
}
catch(IOException e1){
System.out.println("文件出错");
}
}
}
不管 mark()参数是几怎么输出都一样
bufferedinputstream中mark()方法
答案:2 悬赏:10 手机版
解决时间 2021-02-28 15:18
- 提问者网友:愿为果
- 2021-02-27 20:15
最佳答案
- 五星知识达人网友:酒安江南
- 2021-02-27 21:54
你要先理解好mark方法的作用:
mark就像书签一样,在这个BufferedReader对应的buffer里作个标记,以后再调用reset时就可以再回到这个mark过的地方。mark方法有个参数,通过这个整型参数,你告诉系统,希望在读出这么多个字符之前,这个mark保持有效。读过这么多字符之后,系统可以使mark不再有效,而你不能觉得奇怪或怪罪它。这跟buffer有关,如果你需要很长的距离,那么系统就必须分配很大的buffer来保持你的mark。
你读的内容并没有超过默认缓存的长度,就是说系统并没有使你设的mark失效,所以输出的内容都一样,你试试读出很大量的数据再reset,那时的内容就可能不一样啦
mark就像书签一样,在这个BufferedReader对应的buffer里作个标记,以后再调用reset时就可以再回到这个mark过的地方。mark方法有个参数,通过这个整型参数,你告诉系统,希望在读出这么多个字符之前,这个mark保持有效。读过这么多字符之后,系统可以使mark不再有效,而你不能觉得奇怪或怪罪它。这跟buffer有关,如果你需要很长的距离,那么系统就必须分配很大的buffer来保持你的mark。
你读的内容并没有超过默认缓存的长度,就是说系统并没有使你设的mark失效,所以输出的内容都一样,你试试读出很大量的数据再reset,那时的内容就可能不一样啦
全部回答
- 1楼网友:神鬼未生
- 2021-02-27 23:22
public void mark(int readlimit)
这个方法,是在输入流的当前位置做上记号,要和另一个方法配套使用的,reset()可以将留重新定位在最后一次你调用mark()的位置。
readlimit 参数告知此输入流在标记位置无效之前允许读取的字节数。
建议你去网上下一个j2se的api,这些问题要自己学会找资料。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯