Suche…


Einführung

Leser und Verfasser und ihre jeweiligen Unterklassen bieten einfache E / A für text- / zeichenbasierte Daten.

BufferedReader

Einführung

Die BufferedReader Klasse ist ein Wrapper für andere Reader Klassen, der zwei Hauptzwecken dient:

  1. Ein BufferedReader bietet Pufferung für den eingebundenen Reader . Dadurch kann eine Anwendung Zeichen nacheinander ohne übermäßigen E / A-Aufwand lesen.

  2. Ein BufferedReader bietet Funktionen zum Lesen von Text für Zeile.

Grundlagen zur Verwendung eines BufferedReader

Das normale Muster für die Verwendung eines BufferedReader ist wie folgt. Zuerst erhalten Sie den Reader , von dem Sie die Zeichen lesen möchten. Als Nächstes instanziieren Sie einen BufferedReader , der den Reader BufferedReader . Dann lesen Sie Zeichendaten. Schließlich schließen Sie den BufferedReader der den umwickelten `Reader schließt. Zum Beispiel:

File someFile = new File(...);
int aCount = 0;
try (FileReader fr = new FileReader(someFile);
     BufferedReader br = new BufferedReader(fr)) {
    // Count the number of 'a' characters.
    int ch;
    while ((ch = br.read()) != -1) {
        if (ch == 'a') {
            aCount++;
        }
    }
    System.out.println("There are " + aCount + " 'a' characters in " + someFile);
}

Sie können dieses Muster auf jeden Reader anwenden

Anmerkungen:

  1. Wir haben Java 7 (oder später) Try-With-Ressourcen verwendet, um sicherzustellen, dass der zugrunde liegende Reader immer geschlossen ist. Dadurch wird ein potenzielles Ressourcenleck vermieden. In früheren Java-Versionen würden Sie den BufferedReader explizit in einem finally Block schließen.

  2. Der Code im try Block ist praktisch identisch mit dem, was wir verwenden würden, wenn wir direkt aus dem FileReader lesen. Tatsächlich funktioniert ein BufferedReader genauso wie der Reader , den er wrappen würde. Der Unterschied ist, dass diese Version wesentlich effizienter ist.

Die Puffergröße des BufferedReader

Die BufferedReader.readLine () -Methode

Beispiel: Lesen aller Zeilen einer Datei in eine Liste

Dazu wird jede Zeile in einer Datei abgerufen und in eine List<String> . Die Liste wird dann zurückgegeben:

public List<String> getAllLines(String filename) throws IOException {
    List<String> lines = new ArrayList<String>();
    try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
        String line = null;
        while ((line = reader.readLine) != null) {
            lines.add(line);
        }
    }
    return lines;
}

Java 8 bietet eine einfachere Möglichkeit, dies mit der lines() -Methode zu tun:

public List<String> getAllLines(String filename) throws IOException {
    try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
        return br.lines().collect(Collectors.toList());
    }
    return Collections.empty();
}

StringWriter-Beispiel

Die Java-StringWriter-Klasse ist ein Zeichenstrom, der die Ausgabe von Zeichenfolgenpuffer sammelt und zur Erstellung einer Zeichenfolge verwendet werden kann.

Die StringWriter-Klasse erweitert die Writer-Klasse.

In der StringWriter-Klasse werden keine Systemressourcen wie Netzwerk-Sockets und -Dateien verwendet. Das Schließen des StringWriter ist daher nicht erforderlich.

import java.io.*;  
public class StringWriterDemo {  
    public static void main(String[] args) throws IOException {  
        char[] ary = new char[1024];  
        StringWriter writer = new StringWriter();  
        FileInputStream input = null;  
        BufferedReader buffer = null;  
        input = new FileInputStream("c://stringwriter.txt");  
        buffer = new BufferedReader(new InputStreamReader(input, "UTF-8"));  
        int x;  
        while ((x = buffer.read(ary)) != -1) {  
                   writer.write(ary, 0, x);  
        }  
        System.out.println(writer.toString());        
        writer.close();  
        buffer.close();  
    }  
}

Das obige Beispiel hilft uns, ein einfaches Beispiel für StringWriter kennenzulernen, der BufferedReader verwendet, um Dateidaten aus dem Stream zu lesen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow