我从问题中了解到:What are mark and reset in BufferedReader?标记函数的参数将限制标记后可以读取的字符数。
如果参数为0,那么是否表示标记(0)后的任何读取都会使标记无效?为什么reset()仍然有效?
同样,我得到了一个将此参数设置为不同数字50的示例,并报告IOException:Mark invalid。 http://www.coderanch.com/t/426468/java-io/java/Mark-reset-inputstream
所以我自己就写了一个例子。但是,readlimite参数似乎无论如何都不起作用。这是我的程序
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FilterInputStream;
import java.io.InputStream;
public class TestMarkReset {
public static void main(String[] args) throws Exception {
// create input streams
InputStream is = new FileInputStream("/home/peipei/test.txt");
FilterInputStream fis = new BufferedInputStream(is);
// reads and prints BufferedReader
System.out.println((char) fis.read());
System.out.println((char) fis.read());
// mark invoked at this position
fis.mark(1);
System.out.println("mark() invoked");
System.out.println((char) fis.read());
System.out.println((char) fis.read());
System.out.println((char) fis.read());
System.out.println((char) fis.read());
System.out.println((char) fis.read());
System.out.println((char) fis.read());
System.out.println((char) fis.read());
System.out.println((char) fis.read());
System.out.println((char) fis.read());
System.out.println((char) fis.read());
System.out.println((char) fis.read());
// reset() repositioned the stream to the mark
fis.reset();
System.out.println("reset() invoked");
System.out.println((char) fis.read());
System.out.println((char) fis.read());
}
}
有谁能解释一下这个参数发生了什么?为什么有时它会起作用,有时它不起作用?
答案 0 :(得分:0)
您应该说标记后的任何读取<0> 可以使标记无效吗?
唯一的问题是;是你在缓冲区中标记的点?如果是,你仍然可以重置()它。如果没有,你不能因为它已经丢失了。
缓冲区在读取时一次删除一个字节会非常昂贵。当您需要从操作系统中读取更多数据时,它只会清除缓冲区。