Schafft ein Java-Scanner implizit einen Puffer, auch wenn Sie es nicht ein noch passieren?

StackOverflow https://stackoverflow.com/questions/1341345

  •  20-09-2019
  •  | 
  •  

Frage

Wenn ich die folgende Beispieldatei, wobei jede Zahl ist, repräsentiert einen Byte (123 hat den Bytes 1, 2 und 3):

123456789

Lassen Sie uns sagen ich eine Fileinputstream. Dieser liest im binären Byte für Byte. So .lesen () gibt 1, dann 2, usw. Lassen Sie uns jetzt sagen, dass ich einen Puffer erstellen. Der anfängliche chunk es liest (wenn ich das richtig verstanden Puffer) 1-5 ist. Dies ermöglicht es, nur in Byte für Byte nicht zu lesen, aber im Fall von Zeichen ganzer Linien, etc. Aber wenn ich Hit .Read () erneut, fange ich bei 6, und nicht, wo die BufferedReader gestoppt (also wenn 3 eine Zeilenumbruch, und ich sagte dem BufferedReader die erste Zeile zu drucken, druckt es 1-2 und dann .lesen mit () aus der Fileinputstream gibt mir 6 und nicht mehr als 3).

Um die durch das Trennzeichen zu Parse-Daten in der Lage sein, schafft ein Scanner implizit einen Puffer wie, wie ein BufferedReader schafft ein Puffer, so dass es Zeilenumbrüche finden, etc? Und wenn ich einen separaten Fileinputstream in die Scanner passieren, .lesen () verwendet wird nicht das erste Byte nach dem ersten Trennzeichen druckt die Scanner gefunden, sondern am Ende des „Brockens“ der Scanner genommen hat?

War es hilfreich?

Lösung

Ja .

Von dem java.util.Scanner Code:

// Internal buffer used to hold input
private CharBuffer buf;

// Size of internal character buffer
private static final int BUFFER_SIZE = 1024; // change to 1024;

Andere Tipps

Es ist nicht offensichtlich, aber wenn man sich die API doc von Scanner genau hinschauen, sehen Sie, dass es auf der Readable interface - und das einzige Verfahren, das in dieser Schnittstelle auf einem Puffer basiert. Also ja, Scanner erzeugt implizit einen Puffer.

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