codestory

Die Anleitung zu Java BufferedReader

  1. BufferedReader
  2. BufferedReader vs Scanner
  3. Examples
  4. lines()

1. BufferedReader

BufferedReader ist eine Unterklasse von Reader, die zum Vereinfachen des Textschreiben aus der Eingabestream (character input stream) und zur Verbesserung des Programm verwendet wird.
Der Operationsgrundsatz von BufferedReader ist gleich wie die folgende Abbildung:
BufferedReader wickelt sich ein Objekt Reader , das Objekt wird automatisch die Daten aus Quelle (z.B die Datei) filtern und im buffer vom BufferedReader lagern.
BufferedReader überschreibt die aus seiner Vaterklasse geerbten Methode, z.B read(), read(char[]),... um sicherzustellen, dass sie mit der Daten aus buffer , nicht aus der Quelle (Z.B die Datei) manipulieren. Außerdemm bietet BufferedReader die Methode readLine() an um einen Textlinie aus buffer zu lesen.
Der oben erwähnte sogenannte "buffer" ist eigentlich nur ein Zeichenarray. Das Objekt Reader (von BufferedReader) liest automatisch die Zeichen aus der Quelle um in diesem Array zu speichern.
BufferedReader liest die Zeichen aus dem Array buffer und befreit die gelesenen Positionen. Die befreiten Positionen wird benutzt um die von der Quelle neu gelesenen Zeichen zu speichern.
BufferedReader constructors
public BufferedReader(Reader in)

public BufferedReader(Reader in, int sz)
  • Der Contructor BufferedReader(Reader,int) erstellt ein Objekt BufferedReader mit dem festgelegten Array buffer.
  • Der Contructor BufferedReader(Reader) erstellt ein Objekt BufferedReader mit dem Default Array buffer (die Größe = 8192).

2. BufferedReader vs Scanner

In einigen Fällen können Sie die Verwendung von Scanner anstelle von BufferedReader überlegen. Unten ist das der Vergleich zwischen 2 Klassen:
  • BufferedReader ist synchronisiert (thread-safe) während Scanner ist nicht.
  • Scanner kann durch die Verwendung von regulären Ausdruck die Syntax der primitiven Typs und String analysieren.
  • BufferedReader erlaubt die Größe von buffer festlegen während Scanner hat der festen Größe von buffer (1024).
  • BufferedReader hat die größere Defaultgröße von buffer.
  • Scanner versteckt IOException, während BufferedReader uns zwingt, es umzugehen.
  • BufferedReader ist schneller als Scanner denn es liest ohne die Syntax-Analyse die Daten.
  • Die Anleitung zu Java Scanner

3. Examples

Um ein Objekt BufferedReader zu erstellen, brauchen wir ein Objekt Reader zum Lesen der Daten aus der Quelle (z.B aus der Datei) erstellen. Denn Reader ist eine Abstraktklasse, sollen Sie es daher aus einer seiner Unterklassen erstellen
Z.B: Erstellen Sie ein BufferedReader mit der Größe vom Array buffer von 16384. Achtung: Das Datentyp char von Java ist 2 bytes. D.h buffer hat die Kapazität von 32786 bytes (32 KB).
// Create Reader to read a file.
Reader reader = new FileReader("/Volumes/Data/test/test.txt");

// Create a BufferedReader with buffer array size of 16384 (32786 bytes = 32 KB).
BufferedReader br = new BufferedReader(reader, 16384);
Erstellen Sie einen BufferedReader mit der Größe vom Defaultarray buffer (8192), entspricht 16384 bytes (16 KB).
// Create Reader to read a file.
Reader reader = new FileReader("/Volumes/Data/test/test.txt");

// Create a BufferedReader with default buffer array size of 8192 (16384 bytes = 16 KB).
BufferedReader br = new BufferedReader(reader);
Anstelle von der Erstellung von BufferedReader aus seinem Konstruktor können Sie einen BufferedReader nach der folgenden Weise:
BufferedReader br =
     Files.newBufferedReader(Paths.get("/Volumes/Data/test/test.txt"));
Z.B: Verwenden Sie das Methode readLine() von BufferedReader um jede Linie der Text zu lesen.
test.txt
Java Tutorials:

Java Reader Tutorial
Java Writer Tutorial
BufferedReaderEx1.java
package org.o7planning.bufferedreader.ex;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class BufferedReaderEx1 {

    public static void main(String[] args) throws IOException {
        // Create Reader to read a file.
        Reader reader = new FileReader("/Volumes/Data/test/test.txt");

        // Create a BufferedReader with buffer array size of 16384 (32786 bytes = 32 KB).
        BufferedReader br = new BufferedReader(reader, 16384);
    
        String line = null;
        
        while((line = br.readLine())!= null) {
            System.out.println(line);
        }
        br.close();
    }
}
Output:
Java Tutorials:

Java Reader Tutorial
Java Writer Tutorial
Z.B: Verwenden Sie BufferedReader um ein URL zu lesen:
BufferedReaderEx2.java
package org.o7planning.bufferedreader.ex;

import java.io.BufferedReader;  
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;

public class BufferedReaderEx2 {

    public static void main(String[] args) throws IOException {
        
        URL oracleURL = new URL("https://www.oracle.com/");
        
        InputStream inputStream = oracleURL.openStream();
        
        // Create a Reader from its subclass InputStreamReader.
        Reader reader = new InputStreamReader(inputStream);
        
        BufferedReader br = new BufferedReader(reader);

        String inputLine = null;
        while ((inputLine = br.readLine()) != null) {
            System.out.println(inputLine);
        }
        
        br.close();
    }
}

4. lines()

Geben Sie ein Stream zurück. Seine Elementen sind die aus BufferedReader gelesenen Textlinie. Stream ist faul. Das Lesen passiert nur wenn der Benutzer die Daten wirklich braucht.
public Stream<String> lines()
students.txt
# Students:

John P
Sarah M
# Sarah B
Charles B
Mary T
Sophia B
Z.B: Lesen Sie einen Textdatei, die den Namen der Student*innen enthaltet. Löschen Sie die Kommentarlinien, die mit dem Zeichen '#' beginnt und drucken die Linien aus, die mit der Buchstabe "B".
BufferedReader_lines_ex1.java
package org.o7planning.bufferedreader.ex;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.stream.Stream;

public class BufferedReader_lines_ex1 {

    public static void main(String[] args) throws IOException {
        
        Reader reader = new FileReader("/Volumes/Data/test/students.txt");
         
        BufferedReader br = new BufferedReader(reader, 16384);
    
         Stream<String>  stream = br.lines();  
        
         stream //
             .filter(line -> {
                 return !line.trim().startsWith("#") && line.endsWith("B");
             })  
             .forEach(System.out::println);    
            
         br.close();     
    }
}
Output:
Charles B
Sophia B

Die Anleitungen Java IO

Show More