📌  相关文章
📜  Java中的 Reader markSupported() 方法和示例(1)

📅  最后修改于: 2023-12-03 14:42:51.437000             🧑  作者: Mango

Java中的 Reader markSupported() 方法和示例

在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()方法来判断是否支持标记和重置操作。