📌  相关文章
📜  Java中的 BufferedInputStream reset() 方法及示例

📅  最后修改于: 2022-05-13 01:55:43.378000             🧑  作者: Mango

Java中的 BufferedInputStream reset() 方法及示例

Java中BufferedInputStream类的reset()方法用于将流的位置重置为最后一次调用mark方法时的位置。它与同一类的mark()方法组合使用。

一般合同:
有两种情况:

  1. 如果支持 mark() 和 reset(),即如果 markSupported 返回 true,
    • 如果自创建输入流后未调用 mark() 或自上次调用 mark() 方法后从输入流中读取的字节大于最后一次调用 mark 方法的参数,则可能引发 IOException称呼。
    • 如果没有抛出 IOException,则输入流将重置为一种状态,以便在最近一次调用 mark() 之后读取的所有字节再次提供给 read() 的后续调用者。后面是 reset() 调用时的字节。
  2. 如果不支持 mark() 和 reset(),即如果 markSupported 返回 false,
    • 调用 reset() 方法可能会引发 IOException。
    • 如果未抛出 IOException,则输入流将重置为取决于输入流的特定类型的固定状态。为 read() 的后续调用者提供的字节取决于输入流的特定类型。

句法:

public void reset()

Overrides:该方法覆盖FilterInputStream中的reset类。

参数:此方法不接受任何参数。

返回值:此方法不返回任何值。

异常:如果此流尚未被标记或标记已失效或输入流已通过调用 close() 方法关闭或发生 I/O 错误,则此方法抛出IOException

下面的程序说明了 IO 包中 BufferedInputStream 类中的 reset() 方法:

程序1:假设文件“c:/demo.txt”存在。

// Java program to illustrate
// BufferedInputStream reset() method
import java.io.*;
public class GFG {
    public static void main(String[] args)
    {
  
        // Create input stream 'demo.txt'
        // for reading containing text "GEEKS"
        FileInputStream inputStream
            = new FileInputStream(
                "c:/demo.txt");
  
        // Convert inputStream to
        // bufferedInputStream
        BufferedInputStream buffInputStr
            = new BufferedInputStream(
                inputStream);
  
        // Read and print characters one by one
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
  
        // Mark is set on the input stream
        buffInputStr.mark(0);
  
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
  
        System.out.println(
            "reset() called");
  
        // Reset() is invoked
        buffInputStr.reset();
  
        // Read and print characters
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
    }
}
输入:
输出:

程序2:假设文件“c:/demo.txt”存在。

// Java program to illustrate
// BufferedInputStream reset() method
import java.io.*;
public class GFG {
    public static void main(String[] args)
    {
  
        // Create input stream 'demo.txt'
        // for reading containing text
        // "GEEKSFORGEEKS"
        FileInputStream inputStream
            = new FileInputStream(
                "c:/demo.txt");
  
        // Convert inputStream to
        // bufferedInputStream
        BufferedInputStream buffInputStr
            = new BufferedInputStream(
                inputStream);
  
        // Read and print characters one by one
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
  
        // Mark is set on the input stream
        buffInputStr.mark(0);
  
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
  
        System.out.println(
            "reset() called");
  
        // Reset() is invoked
        buffInputStr.reset();
  
        // Read and print characters
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
    }
}
输入:
输出:

参考:
https://docs.oracle.com/javase/10/docs/api/java Java()