ホームページ  >  記事  >  Java  >  Java は、InputStream クラスの mark() 関数を使用してストリーム内の位置をマークします。

Java は、InputStream クラスの mark() 関数を使用してストリーム内の位置をマークします。

WBOY
WBOYオリジナル
2023-07-24 12:46:451164ブラウズ

Java は、InputStream クラスの mark() 関数を使用してストリーム内の位置をマークします。

InputStream クラスは Java IO ライブラリのコア クラスであり、バイト ストリーム データを読み取るために使用されます。バイトデータを読み取るためのメソッドが多数用意されており、非常に便利なメソッドの 1 つが mark() です。 mark() メソッドはストリーム内の位置をマークできるため、後でこの位置に戻ってデータの読み取りを続けることができます。

mark() メソッドは次のように定義されています。

public synchronized void mark(int readLimit)

このうち、readLimit パラメータは、呼び出す前に読み取れることを指定します。 reset() メソッドの最大バイト数。つまり、読み取られたバイト数が readLimit の値を超えた場合、reset() メソッドを呼び出すと IOException がスローされます。

以下は、mark() メソッドとreset() メソッドの使用方法を示すサンプル プログラムです。

import java.io.*;

public class InputStreamMarkExample {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("data.txt");
            BufferedInputStream bis = new BufferedInputStream(fis);

            // 使用mark()方法在流中标记一个位置
            bis.mark(1024);

            // 读取前10个字节的数据
            byte[] buffer = new byte[10];
            bis.read(buffer);
            String data = new String(buffer);
            System.out.println("前10个字节的数据:" + data);

            // 调用reset()方法回到mark标记的位置
            bis.reset();

            // 读取10到20个字节的数据
            bis.skip(10);
            bis.read(buffer);
            data = new String(buffer);
            System.out.println("第10到20个字节的数据:" + data);

            // 关闭流
            bis.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上の例では、まず FileInputStream を作成し、それを BufferedInputStream で修飾します。 、効率を向上させるため。次に、mark() メソッドを使用してストリーム内の位置をマークし、データの最初の 10 バイトを読み取って出力します。次に、reset()メソッドを呼び出してマークマークの位置に戻り、10バイト飛ばして再度10~20バイトのデータを読み込んで出力します。

この例を通して、mark() メソッドとreset() メソッドの使用法を確認できます。これらは、ストリーミング データを読み取り、保存して特定の場所に戻すときに役立ち、データを再読み取りまたは処理できるようになります。ただし、reset() メソッドを呼び出す前に、mark() メソッドを呼び出してマーク位置を設定する必要があることに注意してください。設定された readLimit 値は、reset() メソッドを呼び出す前にバイトが確実に読み取られるように十分な大きさでなければなりません。メソッド この数を超えることはできません。それ以外の場合は、IOException がスローされます。

つまり、Java の InputStream クラスは、mark() メソッドとreset() メソッドを提供します。これらは、ストリーム内の位置をマークし、必要に応じてこの位置に戻ってデータの読み取りを続けるのに役立ちます。これは、特定のデータの再読み取りや特定のデータ ブロックの処理が必要な場合など、特定のシナリオで非常に役立ちます。実際のニーズに応じてこれらのメソッドを合理的に使用して、コードの柔軟性と効率を向上させることができます。

以上がJava は、InputStream クラスの mark() 関数を使用してストリーム内の位置をマークします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。