Tampon
BufferedReader est un flux d'entrée de caractère tamponné. Il hérite du lecteur.
Le but de BufferedReader est d'ajouter une fonction tampon à d'autres flux d'entrée de caractères.
Lors de la création d'un BufferReader, nous spécifierons un lecteur en tant que paramètre via son constructeur. Le BufferReader lira les données du lecteur par lots, et chaque fois qu'une partie est lue dans le tampon; Après avoir utilisé cette partie des données dans le tampon, la partie suivante des données est lue du lecteur.
Pourquoi ai-je besoin de tamponner? La raison en est des problèmes d'efficacité très simples! Les données du tampon sont en fait stockées en mémoire, tandis que les données brutes peuvent être stockées en disque dur ou en nandflash; Nous savons que la lecture des données de la mémoire est au moins 10 fois plus rapide que la lecture des données du disque dur.
Alors pourquoi ne pas simplement lire toutes les données dans le tampon en même temps? Tout d'abord, il peut prendre beaucoup de temps pour lire toutes les données. Deuxièmement, le prix de la mémoire est très cher et la capacité n'est pas aussi importante que le disque dur.
Exemple:
Importer java.io.bufferedReader; import java.io.bytearrayinputStream; import java.io.file; import java.io.inputstream; importer java.io.fileReader; import java.io.ioexception; statique final int len = 5; public static void main (String [] args) {testBuffereDReader (); } / ** * Fonction de test de l'API BuffereDReader * / private static void testBuffereDReader () {// Créer un flux de caractères BuffereDreader, qui est le Arraytters Array try {file file = new File ("BuffereDader.txt"); BufferedReader dans = new BufferedReader (nouveau FileReader (fichier)); // Lire 5 caractères du flux de caractères. "ABCDE" pour (int i = 0; i <len; i ++) {// Si vous pouvez continuer à lire le caractère suivant, lisez le caractère suivant if (in.ready ()) {// lire "le caractère suivant du flux de caractères" int tmp = in.read (); System.out.printf ("% d:% c / n", i, tmp); }} // Si "ce flux de caractères" ne prend pas en charge la fonction de marquage, quittez directement si (! In.markSupported ()) {System.out.println ("Make Not SupportEd!"); retour ; } // Mark "Position d'index actuelle", c'est-à-dire marquer l'élément de la 6e position - "F" // 1024 correspond à Marklimit dans.mark (1024); // ignore 22 caractères. in.skip (22); // Lire 5 caractères char [] buf = new char [len]; in.read (buf, 0, len); System.out.printf ("buf =% s / n", string.valueof (buf)); // Lire les données restantes de la ligne System.out.printf ("readLine =% s / n", dans.readline ()); // Réinitialise «l'indice du flux d'entrée» à la position marquée par Mark (), c'est-à-dire réinitialiser avec «F». in.reset (); // Lire 5 caractères de "réinitialiser le flux de caractères" dans BUF. C'est-à-dire lire "fghij" in.read (buf, 0, len); System.out.printf ("buf =% s / n", string.valueof (buf)); joindre(); } catch (filenotFoundException e) {e.printStackTrace (); } catch (SecurityException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); }}} Le contenu de BufferedReader.txt Read dans le programme est le suivant:
abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz
Résultats en cours:
0: a1: b2: c3: d4: ebuf = 01234readline = 56789buf = fghij
Tampon
BufferedWriter est un flux de sortie de caractères tamponné. Il hérite de l'écrivain.
Le but de BufferedWriter est d'ajouter des fonctionnalités tampon à d'autres flux de sortie de caractères.
BufferedWriter tamponne les données via un tableau de caractères. Lorsque le tampon est plein ou que l'utilisateur appelle la fonction Flush (), il écrit les données du tampon dans le flux de sortie.
Exemple:
Importer java.io.bufferedwriter; import java.io.file; import java.io.outputStream; import java.io.filewriter; import java.io.ioexception; import java.io.filenotfoundException; import java.lang.securityException; importer java.util.scanner; 5; // correspondant à la lettre anglaise "ABCDEFGHIJKLMNOPQRSTUVWXYZ" // Char final statique privé [] Arrayletters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; Char final statique privé [] Arrayletters = nouveau char [] {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q' ',' R ',' S ' public static void main (String [] args) {testBufferedWriter (); } / ** * Fonction de test de l'API BufferedWriter * / private static void testBotteredWriter () {// Créer le tampon de tampon correspondant au "flux de sortie du fichier" // sa taille de tampon correspondante est de 16, c'est-à-dire lorsque les données de tampon> = 16, le contenu du tampon sera automatiquement écrit dans le flux de sortie. try {file file = new File ("bufferwriter.txt"); BufferedWriter out = new BufferedWriter (nouveau FileWriter (fichier)); // Écrivez les 10 premiers caractères du tableau Arrayletters sur le flux de sortie Out.Write (Arraytters, 0, 10); // Écrivez "Line Break / N" sur le flux de sortie Out.Write ('/ N'); out.flush (); // readUserInput (); out.close (); } catch (filenotFoundException e) {e.printStackTrace (); } catch (SecurityException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); }} / ** * Lire l'entrée utilisateur * / private static void readUserInput () {System.out.println ("Veuillez saisir un texte:"); Lecteur de scanner = nouveau scanner (System.in); // attendez une chaîne d'entrée str = reader.next (); System.out.printf ("l'entrée est:% s / n", str); }}Résultat en cours d'exécution: le fichier "bufferwriter.txt" est généré et le contenu du fichier est "ABCDEFGHIJ".