Spezieller gepufferter Reader

nrg

Top Contributor
Hallo Zusammen,

ich möchte gerne einen speziellen gepufferten Reader schreiben. Meiner sieht atm so aus:

Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class TestReader {

	private BufferedReader bf;
	private char qualifier;
	
	public TestReader(File file) throws FileNotFoundException {
		this.bf = new BufferedReader(new FileReader(file));
		this.qualifier = '"';
	}

	public String readElement() throws IOException {
		int i = bf.read();
		if (i != -1) {
			char c = (char)i;
			if (c == '#') return c + bf.readLine();
			boolean entityEnd = false;
			boolean qualified = c == qualifier;
			StringBuffer sb = new StringBuffer();
			sb.append(c);
			while (!entityEnd && (i = bf.read()) != -1) {
				c = (char)i;
				if (c == '\r' && !qualified) continue;
				if (c == '\n' && !qualified) entityEnd = true;
				else {
					if (c == qualifier) qualified = !qualified;	
					sb.append(c);
				}
			}
			return sb.toString();
		}
		return null;
	}
	
	public void close() throws IOException {
		bf.close();
	}

readElement() soll genau eine Zeile lesen, wenn die Zeile mit # beginnt. Ansonsten soll er solange lesen, bis
Code:
"\r?\n
kommt.

Das funktioniert auch aber für mein Verständnis ist letzteres nicht gepuffert, oder? Wie schreibe ich das am besten mit einem Buffer?
 
S

SlaterB

Gast
zu viele Buffer verderben den Brei,
Zweck des Buffers ist, nicht jedes Zeichen einzeln von der Festplatte zu lesen oder was immer die Stream-Quelle ist,
mit Zwischenschalten eines BufferedReader ist das komplett gelöst,

danach kannst du durchaus Zeichen einzeln lesen, in StringBuilder einfügen usw., das ist die natürliche gewünschte Verarbeitung,

wenn du z.B. aus vermeintlicher Sparsamkeit gleich 1000 Zeichen in einem Array einlesen würdest, wäre es gewiss noch schneller,
aber damit hättest du den BufferedReader arbeitslos gemacht,

kann man so machen, quasi BufferedReader nebenbei auch noch nachbauen, je mehr Code auf wenig Raum desto effizienter,
sofern man keine Fehler einbaut, aber nötig ist das nicht,
BufferedReader buffert, deine Methode zeichenweise arbeiten lassen, damit kann man leben
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Ähnliche Java Themen

Neue Themen


Oben