Java FilterInputStream.mark()方法

原文:https://www.studytonight.com/java-file-io/java-filterinputstream-mark-method

在本教程中,我们将学习 JavaFilterInputStream 类的 mark()方法。此方法用于设置特定FilterInputStream中的当前位置。reset()方法的后续调用会将流重新定位到该方法最近标记的点。这是一个非静态方法,在 java.io 包中可用。

句法

这是此方法的语法声明。它只接受一个参数作为标记位置无效之前可以从当前输入流中读取的最大字节数的限制。它不返回值。

public void mark(int readlimit)

示例 1:设置流中的当前位置

在本例中,我们通过调用方法 mark()来标记流的初始位置,在读取这两个字符之后,我们读取这两个字符,我们调用 reset()方法来将当前流的指针设置到最近标记的位置,如果我们尝试读取,那么它将从最后标记的位置给出输出数据。

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FilterInputStream;
import java.io.IOException;
public class StudyTonight
{
    public static void main(String args[])
    {
         try
         {             
                File file = new File("E:\\studytonight\\output.txt");
                FileInputStream fis = new FileInputStream(file);
                FilterInputStream filterIs = new BufferedInputStream(fis);     
                filterIs.mark(0);
                System.out.println((char) filterIs.read());
                System.out.println((char) filterIs.read());
                System.out.println("Last mark call at 0th index:- ");
                filterIs.reset();
                System.out.println("reset() called ");
                System.out.println((char) filterIs.read());
                System.out.println((char) filterIs.read());
                fis.close();
                filterIs.close();
            } 
             catch (IOException ex) 
             {
                ex.printStackTrace();
            }
    }
}

H e 第 0 个指数的最后一次标记调用:- reset()称为 H e

输出. txt

Hello Studytonight

示例 2:设置流中的当前位置

在本例中,我们连续调用了 mark()和 reset()方法,因此它通常会给出与 read()方法相同的输出,因为流中最近标记的位置和当前读取位置是相同的。

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FilterInputStream;
import java.io.IOException;

public class StudyTonight
{
    public static void main(String args[])
    {
         try
         {             
                File file = new File("E:\\studytonight\\output.txt");

                FileInputStream fis = new FileInputStream(file);
                FilterInputStream filterIs = new BufferedInputStream(fis);                    

                System.out.println((char) filterIs.read());
                System.out.println((char) filterIs.read());
                filterIs.mark(0);
                filterIs.reset();
                System.out.println("reset() called ");

                System.out.println((char) filterIs.read());
                System.out.println((char) filterIs.read());
                System.out.println((char) filterIs.read());

                fis.close();
                filterIs.close();

            } 
             catch (IOException ex) 
             {
                ex.printStackTrace();
            }
    }
}

H e 复位()称为 l l o

输出. txt

Hello Studytonight

示例 3:设置流中的当前位置

这里,我们看一下如果找到多个方法,会考虑哪个 mark()方法,看完输出后我们可以得出一个结论,它只会考虑最近标记的最后一个位置。

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FilterInputStream;
import java.io.IOException;

public class StudyTonight
{
    public static void main(String args[])
    {
         try
         {             
                File file = new File("E:\\studytonight\\output.txt");

                FileInputStream fis = new FileInputStream(file);
                FilterInputStream filterIs = new BufferedInputStream(fis);                    

                System.out.println((char) filterIs.read());
                filterIs.mark(0);

                System.out.println((char) filterIs.read());
                filterIs.mark(0);

                System.out.println((char) filterIs.read());
                System.out.println((char) filterIs.read());
                System.out.println((char) filterIs.read());

                filterIs.reset();
                System.out.println("reset() called ");

                System.out.println((char) filterIs.read());
                System.out.println((char) filterIs.read());

                fis.close();
                filterIs.close();

            } 
             catch (IOException ex) 
             {
                ex.printStackTrace();
            }
    }
}

H e l l o 复位()称为 l l

结论:

在本教程中,我们学习了 JavaFilterInputStream 类的 mark()方法,该方法将标记设置为给定FilterInputStream中的当前位置,并且后续调用 reset()方法将会将流重新定位到 mark()方法标记的最近点。它只能用类对象访问,如果我们试图用类名访问方法,我们会得到一个错误。