Maison  >  Article  >  Java  >  Java utilise la fonction mark() de la classe InputStream pour marquer une position dans le flux

Java utilise la fonction mark() de la classe InputStream pour marquer une position dans le flux

WBOY
WBOYoriginal
2023-07-24 12:46:451182parcourir

Java utilise la fonction mark() de la classe InputStream pour marquer une position dans le flux

La classe InputStream est une classe principale de la bibliothèque Java IO et est utilisée pour lire les données du flux d'octets. Il fournit de nombreuses méthodes pour lire des données d'octets, l'une des méthodes très utiles est mark(). La méthode mark() peut marquer une position dans le flux afin que vous puissiez revenir à cette position ultérieurement pour continuer la lecture des données. La méthode

mark() est définie comme suit :

public synchronisé void mark(int readLimit)

Parmi eux, le paramètre readLimit spécifie le nombre maximum d'octets pouvant être lus avant d'appeler la méthode reset(). Autrement dit, si le nombre d'octets lus dépasse la valeur readLimit, l'appel de la méthode reset() lèvera une IOException.

Voici un exemple de programme qui montre comment utiliser les méthodes mark() et 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();
        }
    }
}

Dans l'exemple ci-dessus, nous créons d'abord un FileInputStream et le décorons avec BufferedInputStream pour améliorer l'efficacité. Ensuite, nous utilisons la méthode mark() pour marquer une position dans le flux, puis lisons les 10 premiers octets de données et les imprimons. Ensuite, nous appelons la méthode reset() pour revenir à la position de la marque, puis sautons 10 octets, lisons à nouveau 10 à 20 octets de données et les imprimons.

À travers cet exemple, nous pouvons voir l'utilisation des méthodes mark() et reset(). Ils nous aident lors de la lecture des données en streaming, les sauvegardent et les renvoient à un emplacement spécifique afin que nous puissions relire ou traiter les données. Cependant, il convient de noter qu'avant d'appeler la méthode reset(), nous devons appeler la méthode mark() pour définir une position de marque, et la valeur readLimit définie doit être suffisamment grande pour garantir que les octets lus avant d'appeler la méthode reset(). méthode Le nombre ne peut pas le dépasser. Sinon, une IOException sera levée.

En bref, la classe InputStream de Java fournit les méthodes mark() et reset(), qui peuvent nous aider à marquer la position dans le flux et à revenir à cette position pour continuer à lire les données en cas de besoin. Ceci est très utile dans certains scénarios, comme par exemple avoir besoin de relire un certain élément de données ou de traiter certains blocs de données spécifiques. Nous pouvons faire un usage raisonnable de ces méthodes en fonction des besoins réels pour améliorer la flexibilité et l'efficacité du code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn