Java FilterInputStream.reset()方法

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

在本教程中,我们将学习 JavaFilterInputStream 类的 reset()方法。此方法用于将当前FilterInputStream重新定位到给定流中最近一次调用 mark()方法的位置。这是一种非静态方法,可在 java.io 包中获得。

句法

这是此方法的语法声明。它不接受任何参数,并且该方法的返回类型是无效的,即它不返回任何值。

public void reset()

示例 1:在 Java 中重置输入流中的标记

这里,我们实现了 reset()方法,将当前流的指针重置到最近标记的位置。首先,我们最初标记当前流的位置,然后我们从文件中读取数据,然后我们通过调用方法 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:在 Java 中重置输入流中的标记

在这个例子中,我们正在读取数据并标记位置,然后在标记位置之后,我们通过调用方法 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);                    

                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:在 Java 中重置输入流中的标记

如果我们调用 reset()方法而不调用任何 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);     

                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 Java . io . io 异常:重置为无效标记

结论:

在本教程中,我们学习了 JavaFilterInputStream 类的 reset()方法,该方法将特定FileInputStream重置到给定输入流中最近调用 mark()方法的位置。它只能用类对象访问,如果我们试图用类名访问方法,我们会得到一个错误。