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

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

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

Java中BufferedInputStream类的mark()方法用于标记输入流中的当前位置。同一个类BufferedInputStream的 Reset() 方法在 mark() 方法之后调用。 Reset() 将位置固定在最后标记的位置,以便可以再次读取相同的字节。

一般约定:输入流以某种方式保存调用 mark() 方法后读取的所有字节,并在调用 reset() 方法时再次返回相同的字节。仅当 markSupported() 返回 true 时才执行此操作。但是,如果在调用 reset() 方法之前读取的字节数超过 readlimit 字节数,则输入流不需要保存任何数据。

句法:

public void mark(int readlimit)

覆盖:它覆盖了FilterInputStream类的 mark() 方法。

参数:该方法接受一个Integer类型的参数readlimit ,表示标记位置失效前可以读取的最大字节数。

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

异常:此方法不会抛出任何异常。

下面的程序说明了 IO 包中 BufferedInputStream 类中的 mark() 方法:
程序1:假设文件“c:/demo.txt”存在。

// Java program to illustrate
// BufferedInputStream mark() 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());
  
        // Reset() is invoked
        buffInputStr.reset();
  
        // Read and print characters
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
        System.out.println(
            "Char : "
            + (char)buffInputStr.read());
    }
}
输出:
Char : G
Char : E
Char : E
Char : K
Char : K
Char : S

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

// Java program to illustrate
// BufferedInputStream.mark() 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());
  
        // 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());
    }
}
输出:
Char : G
Char : E
Char : E
Char : K
Char : S
Char : S
Char : F
Char : O
Char : R

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