Frage

Ich lese aus dem Inputstream eines Sockets. Da ich die eingehenden Daten im laufenden Fliegen analysiere, muss ich den Charakter durch Charakter lesen.

Tut BufferedReader.read() Das Gleiche wie InputStream.read() tut ? (Angenommen, BufferedReader wurde mit dem InputStream als Basis konstruiert)

Ist es effizienter, InputStream.read () zu verwenden, wenn Sie jedes Zeichen separat lesen? Oder gibt es einen besseren Weg?

War es hilfreich?

Lösung

BufferedReader liest mehrere Zeichen eines zugrunde liegenden Lesers. Ein Inputstream liefert Bytes. Sie arbeiten also an 2 verschiedenen Datentypen. Wie wickeln Sie einen Leser um einen Stream? Vermutlich sind Sie so etwas wie:

 BufferedReader in
   = new BufferedReader(new InputStreamReader(socket));

In diesem Fall würde ich darauf achten, Ihre Charakter -Codierung anzugeben.

Aus der Sicht der Optimierung wäre es besser, den BufferedReader zu verwenden, da es mehrere Kilobyte gleichzeitig lesen wird und Sie jeden Charakter annehmen können, wenn Sie möchten (nicht unbedingt ein neues IO -Lesen erzwingen).

Andere Tipps

Read () Methode der InputStream -Klasse ist eine abstrakte Methode. Es sollte ein InputStreamrreader sein, denke ich. Wenn Sie auf Ihre Frage komme, werden beide read () die Methode der InputStreamReader- und BufferesReader-Klasse das Gleiche tun- den ASCII-Wert eines Charakters zurückgeben. Der einzige Unterschied ist, dass BufferedReader sogenannt wird, dass wir Pufferung genannt werden, die uns reduzieren können, wie oft wir lesen, aus denen wir lesen Die Festplatte/Stdin durch Kopieren von Brocken in den Hauptspeicher, bei dem jeder Aufruf von Read () als Verwendung von InputStreamReader () Bytes aus der Festplatte/Stdin gelesen, in Zeichen konvertiert und dann zurückgegeben werden kann, was sehr ineffizient sein kann.

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