Frage

Was ist der Sinn der Puffergröße im Konstruktor?

BufferedReader(Reader in, int size)

Wie ich das Programm geschrieben:

import java.io.*;
class bufferedReaderEx{
    public static void main(String args[]){
        InputStreamReader isr = null;
        BufferedReader br = null;
            try{
                isr = new InputStreamReader(System.in);
//              System.out.println("Write data: ");
//              int i = isr.read();
//              System.out.println("Data read is: " + i);
                //Thus the InputStreamReader is useful for reading the character from the stream
                System.out.println("Enter the data to be read by the bufferedReader: ");
                //here isr is containing the lnefeed already so this is needed to be flushed.
                br = new BufferedReader(isr, 2);
                String str = br.readLine();
                System.out.println("The data is : :" +  str);
            }catch(IOException e){
                System.out.println("Can't read: " + e.getMessage());
            }
    }
}

Ausgabe:

Enter the data to be read by the bufferedReader: Hello world and hello world again
The data is: Hello world and hello world again

Und was tut die Puffergröße Mittel, wie ich gedacht, dass es nur zwei Zeichen lesen würde. aber es war nicht so.

War es hilfreich?

Lösung

BufferedReader puffert die Eingabe, wie der Name schon sagt. Dies bedeutet, dass es von der Eingangsquelle in einen Puffer liest, bevor sie auf Sie vorbei. Die Puffergröße bezieht sich hier auf die Anzahl von Bytes es puffert.

Beim Lesen Eingang von den meisten Quellen ist sehr langsam. Ein Puffer von nur 2 Bytes wird weh tun Leistung, wie Ihr Programm sehr wahrscheinlich bei der Eingabe der meiste Zeit geht zu warten. Mit einer Puffergröße von 2, ein Lesen von 100 Bytes führt beim Lesen von 2 Bytes aus dem In-Memory-Puffer (sehr schnell), die Pufferfüllung (sehr langsam), Lesen 2 Bytes aus dem Puffer (sehr schnell), Füllen der Puffer (sehr langsam), usw. - insgesamt sehr langsam. Mit einer Puffergröße von 100, wird ein Lesen von 100 Byte führt beim Lesen 100 Bytes aus dem In-Memory-Puffer (sehr schnell) - insgesamt sehr schnell. Dies ist unter der Annahme, der Puffer enthält das 100 Bytes, wenn zwar das Lesen, die in einem Fall, wie das Ihre ist eine vernünftige Annahme zu machen.

Wenn Sie nicht wissen, was Sie tun, sollten Sie die Standardpuffergröße verwenden, die ziemlich groß ist. Ein Grund für einen kleineren Puffer ist, wenn Sie sich auf eine begrenzte Speichergerät ausgeführt wird, als Pufferspeicher verbraucht.

Andere Tipps

http://www.docjar.com/html/api/java/io /BufferedReader.java.html

Per dieser Java-Dokumentation, Standardpuffergröße ist 8192 Zeichen Kapazität. Zeilengröße wird als 80 Zeichen Kapazität.

8192 Puffergröße ist für kleinere Dateigrößen ausreichend. Aber auch dies ist Erweiterbare. wenn die Datei mehr als 8192 Zeichen enthält, dann füllt Methode von BufferedReader wird die Puffergröße erhöhen, bevor Inhalt aus der Datei zu lesen. Für größere Inhaltsdateien Ihre eigene maximale Größe zu puffern beim Erstellen gepufferten Leser durch Konstruktor vorzugsweise eingestellt, so dass Sie Speicher neu vermeiden und das Kopieren des alten Array in neu erstellen Array.

Wenn Sie in einer Datei zu lesen oder zu schreiben, müssen Sie den Kernel zugreifen, die tatsächlich Zugriff auf die Datei erhält. Alle Dateioperationen müssen durch den Kernel gehen. Dies ist ein ziemlich kostspieliger Vorgang. Buffering verursacht ein Stück zu lesenden Bytes; Diese werden in einem temporären Speicherort im RAM gehalten und Bytes wird in dieser Position zu lesen. Auf diese Weise machen Sie nicht häufig Anfragen der Kernel-Datei IO zu tun.

Wenn Sie eine große Puffergröße verwenden, werden Sie RAM unnötig Schwein auf. Wenn Sie ein winziges verwenden, werden Sie den Kernel ständig für Dateianforderungen abgehört. Am besten ist es der Standard zu ermöglichen, verwendet werden. Sie können Puffergröße und Experiment angeben. Die meisten Maschinen einen Sektor zu einer Zeit, oder eine ganze Zahl von Sektoren lesen. Die Sektorgröße hängt davon ab, wie Sie Ihre Maschine formatiert werden.

Das folgende Experiment ist interessant. Erstellen Sie eine Datei mit 1.000.000 Nullen drin. Verwenden Sie Ihre OS Timing-Funktion, um zu sehen, wie schnell es kopiert sie in eine andere Datei (Sie werden ein Kopierprogramm mit gepufferten und ungepufferten IO schreiben). Zeit, es mit verschiedenen Puffergrößen einschließlich dem Standard.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top