Heim  >  Artikel  >  Java  >  Java verwendet die Funktion mark() der InputStream-Klasse, um eine Position im Stream zu markieren

Java verwendet die Funktion mark() der InputStream-Klasse, um eine Position im Stream zu markieren

WBOY
WBOYOriginal
2023-07-24 12:46:451132Durchsuche

Java verwendet die Funktion mark() der InputStream-Klasse, um eine Position im Stream zu markieren.

Die InputStream-Klasse ist eine Kernklasse in der Java IO-Bibliothek und wird zum Lesen von Byte-Stream-Daten verwendet. Es bietet viele Methoden zum Lesen von Bytedaten. Eine der sehr nützlichen Methoden ist mark(). Die Methode mark() kann eine Position im Stream markieren, sodass Sie später zu dieser Position zurückkehren können, um mit dem Lesen von Daten fortzufahren. Die

mark()-Methode ist wie folgt definiert:

public synchronisiert void mark(int readLimit)

Unter diesen gibt der readLimit-Parameter die maximale Anzahl von Bytes an, die vor dem Aufruf der reset()-Methode gelesen werden können. Das heißt, wenn die Anzahl der gelesenen Bytes den Wert von readLimit überschreitet, löst der Aufruf der Methode reset() eine IOException aus.

Hier ist ein Beispielprogramm, das die Verwendung der Methoden mark() und reset() demonstriert:

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();
        }
    }
}

Im obigen Beispiel erstellen wir zunächst einen FileInputStream und dekorieren ihn mit BufferedInputStream, um die Effizienz zu verbessern. Dann verwenden wir die Methode mark(), um eine Position im Stream zu markieren, lesen dann die ersten 10 Datenbytes und drucken sie aus. Dann rufen wir die Methode reset () auf, um zur Markierungsposition zurückzukehren, überspringen dann 10 Bytes, lesen erneut 10 bis 20 Bytes Daten und drucken sie aus.

Anhand dieses Beispiels können wir die Verwendung der Methoden mark() und reset() sehen. Sie helfen uns, Streaming-Daten auszulesen, zu speichern und an einen bestimmten Ort zurückzukehren, damit wir die Daten erneut lesen oder verarbeiten können. Es ist jedoch zu beachten, dass wir vor dem Aufruf der Methode reset () die Methode mark () aufrufen müssen, um eine Markierungsposition festzulegen, und der festgelegte readLimit-Wert groß genug sein muss, um sicherzustellen, dass die gelesenen Bytes vor dem Aufruf von reset () gelesen werden. Methode Die Anzahl darf diesen Wert nicht überschreiten. Andernfalls wird eine IOException ausgelöst.

Kurz gesagt bietet die InputStream-Klasse von Java die Methoden mark() und reset(), die uns helfen können, die Position im Stream zu markieren und zu dieser Position zurückzukehren, um bei Bedarf mit dem Lesen von Daten fortzufahren. Dies ist in bestimmten Szenarien sehr nützlich, beispielsweise wenn ein bestimmtes Datenelement erneut gelesen oder bestimmte Datenblöcke verarbeitet werden müssen. Wir können diese Methoden entsprechend den tatsächlichen Anforderungen sinnvoll nutzen, um die Flexibilität und Effizienz des Codes zu verbessern.

Das obige ist der detaillierte Inhalt vonJava verwendet die Funktion mark() der InputStream-Klasse, um eine Position im Stream zu markieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn