Die Anleitung zu Java PushbackReader
1. PushbackReader
Manchmal bei dem Arbeiten mit einem Zeicheneingabestream (character input stream) sollen Sie einigen Zeichen im Voraus lesen um zu wissen, was passieren wird. Bevor Sie die aktuelle Zeicheninterpretation definieren können, können Sie sie zurückschieben. Mit der Klasse PushbackReader können Sie dies tun.
PushbackReader verwaltet ein Objekt Reader. Das Objekt wird die Daten aus der Quelle (z.B die Datei) lesen. Gleichzeitig verwaltet PushbackReader ein Zeichenarray- buffer.
Zu Beginn wird keine Zeichen dem buffer zugewiesen. Die Methode PushbackReader.read wird die Zeichen aus Reader.read zurückgeben.
Wenn Sie die Methode PushbackReader.unread zum Zurückschieben der Zeichen aufrufen, werden sie im Array buffer gelagert.
Wenn Sie das nächste Mal die Methode PushbackReader.read aufrufen, werden die im Array buffer gespeichert. Die Methode Reader.read wird nur aufgerufen wenn keine Zeichen mehr im Array buffer vorhanden sind.
PushbackReader constructors
public PushbackReader(Reader in, int size)
public PushbackReader(Reader in)
- Der Contructor PushbackReader(Reader,int) erstellt ein Objekt PushbackReader mit dem Array buffer , dessen Größe festgelegt wird.
- Der Contructor PushbackReader(Reader) erstellt ein Objekt PushbackReader mit dem Array buffer mit der Defaultgröße (size = 1).
2. Examples
Angenommen, Sie haben eine Textdatei mit der Kommentaren, die mit 2 Minuszeichen (--) beginnen. Wie lese ich den Inhalt der Datei und entferne die Kommentare?
test.txt
3 + 5 = 8 -- This is an Addition (+)
100 - 10 = 90 -- This is a Subtraction (-)
-- Multiplication:
2 * 3 = 6
-- Division:
200 / 20 = 10
Sie können PushbackReader verwenden um die Inhalt der oben erwähnten Textdatei zu analysieren. Wenn Sie sich außerhalb eines Kommentars befinden und auf ein Minuszeichen (-) stoßen, müssen Sie das nächste Zeichen lesen, um festzustellen, ob es sich um ein Minuszeichen handelt oder nicht, um zu entscheiden, was mit dem aktuellen Zeichen geschehen soll.
PushbackReaderEx1.java
package org.o7planning.pushbackreader.ex;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PushbackReader;
import java.io.Reader;
public class PushbackReaderEx1 {
public static void main(String[] args) throws IOException {
Reader reader = new FileReader(new File("test.txt"));
PushbackReader pr = new PushbackReader(reader);
StringBuilder sb = new StringBuilder();
boolean inComment = false;
int ch;
while ((ch = pr.read()) != -1) {
if (inComment) {
if (ch == '\n') {
sb.append((char)ch);
inComment = false;
}
continue;
} else {
if (ch == '-') {
// Read next char
int nextChar = pr.read();
if (nextChar == -1 || nextChar != '-') {
sb.append((char) ch);
pr.unread(nextChar); // Push back nextChar into stream.
} else {
inComment = true;
}
} else {
sb.append((char)ch);
}
}
}
pr.close();
System.out.println(sb.toString());
}
}
Output:
3 + 5 = 8
100 - 10 = 90
2 * 3 = 6
200 / 20 = 10
Die Verwendung eines FileReader zum Lesen jeder Zeichen kostet viele Zeit. Sie können BufferedReader verwenden um die Leistung des Beispiel oben zu verbessern:
PushbackReaderEx1b.java
package org.o7planning.pushbackreader.ex;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PushbackReader;
import java.io.Reader;
public class PushbackReaderEx1b {
public static void main(String[] args) throws IOException {
// Wrap the FileReader by a BufferedReader.
Reader reader = new BufferedReader(new FileReader(new File("test.txt")));
PushbackReader pr = new PushbackReader(reader);
StringBuilder sb = new StringBuilder();
boolean inComment = false;
int ch;
while ((ch = pr.read()) != -1) {
if (inComment) {
if (ch == '\n') {
sb.append((char)ch);
inComment = false;
}
continue;
} else {
if (ch == '-') {
// Read next char
int nextChar = pr.read();
if (nextChar == -1 || nextChar != '-') {
sb.append((char) ch);
pr.unread(nextChar); // Push back nextChar into stream.
} else {
inComment = true;
}
} else {
sb.append((char)ch);
}
}
}
pr.close();
System.out.println(sb.toString());
}
}
Die Anleitungen Java IO
- Die Anleitung zu Java CharArrayWriter
- Die Anleitung zu Java FilterReader
- Die Anleitung zu Java FilterWriter
- Die Anleitung zu Java PrintStream
- Die Anleitung zu Java BufferedReader
- Die Anleitung zu Java BufferedWriter
- Die Anleitung zu Java StringReader
- Die Anleitung zu Java StringWriter
- Die Anleitung zu Java PipedReader
- Die Anleitung zu Java LineNumberReader
- Die Anleitung zu Java PushbackReader
- Die Anleitung zu Java PrintWriter
- Die Anleitung zu Java IO Binary Streams
- Die Anleitung zu Java IO Character Streams
- Die Anleitung zu Java BufferedOutputStream
- Die Anleitung zu Java ByteArrayOutputStream
- Die Anleitung zu Java DataOutputStream
- Die Anleitung zu Java PipedInputStream
- Die Anleitung zu Java OutputStream
- Die Anleitung zu Java ObjectOutputStream
- Die Anleitung zu Java PushbackInputStream
- Die Anleitung zu Java SequenceInputStream
- Die Anleitung zu Java BufferedInputStream
- Die Anleitung zu Java Reader
- Die Anleitung zu Java Writer
- Die Anleitung zu Java FileReader
- Die Anleitung zu Java FileWriter
- Die Anleitung zu Java CharArrayReader
- Die Anleitung zu Java ByteArrayInputStream
- Die Anleitung zu Java DataInputStream
- Die Anleitung zu Java ObjectInputStream
- Die Anleitung zu Java InputStreamReader
- Die Anleitung zu Java OutputStreamWriter
- Die Anleitung zu Java InputStream
- Die Anleitung zu Java FileInputStream
Show More
- Anleitungen Java Servlet/JSP
- Die Anleitungen Java New IO
- Anleitungen Spring Cloud
- Die Anleitungen Oracle Java ADF
- Die Anleitungen Java Collections Framework
- Java Grundlagen
- Die Anleitungen Java Date Time
- Java Open Source Bibliotheken
- Anleitungen Java Web Services
- Die Anleitungen Struts2 Framework
- Anleitungen Spring Boot