📅  最后修改于: 2023-12-03 14:42:51.437000             🧑  作者: Mango
在Java中,Reader类是用来读取字符流的抽象父类。markSupported()是Reader类的一个方法,用于返回流是否支持mark()和reset()方法。
方法签名:
public boolean markSupported()
返回值:一个布尔值,表示流是否支持mark()和reset()方法。
mark()方法用于在流中标记当前位置,reset()方法用于将流的位置重置为最近的标记位置。如果该流支持标记和重置操作,则返回true,否则返回false。
下面是一个使用markSupported()方法的示例程序:
import java.io.*;
public class ReaderDemo {
public static void main(String[] args) throws Exception {
String str = "Hello world!";
Reader reader = new StringReader(str);
System.out.println("Supported mark and reset? " + reader.markSupported());
if (reader.markSupported()) {
reader.mark(0);
char[] buf = new char[5];
reader.read(buf);
System.out.println(new String(buf));
reader.reset();
reader.read(buf);
System.out.println(new String(buf));
}
reader.close();
}
}
在上面的示例程序中,我们先将一个字符串"Hello world!"放入一个StringReader对象中,然后调用markSupported()方法判断该流是否支持标记和重置操作。如果支持,则调用mark()方法标记当前位置,接着读取5个字符并输出,然后调用reset()方法将流的位置重置为最近的标记位置,再次读取5个字符并输出。如果不支持,则直接关流。
通过上面的示例程序我们知道,StringReader是支持mark()和reset()方法的,因此markSupported()方法返回true。而对于其他的字符流类,如FileReader、InputStreamReader等,它们是否支持mark()和reset()方法则取决于相应的输入流是否支持。例如,FileInputStream是支持mark()和reset()方法的,而System.in是不支持的。
因此,我们在使用mark()和reset()方法时要注意流是否支持,否则可能会引起异常。同时,在读取任何输入流时,建议在读取之前都先调用markSupported()方法来判断是否支持标记和重置操作。