Руководство Java FilterReader
1. FilterReader
FilterReader - это абстрактный подкласс класса Reader, который является базовым классом для создания подклассов для выборочного чтения необходимых символов. Например, вы хотите прочитать HTML-документ и игнорировать теги (tag). Вам нужно написать подкласс FilterReader, вы не можете использовать FilterReader напрямую, потому что это абстрактный класс (abstract class).

FilterReader напрямую не считывает данные из источника (например, файл), но управляет другим Reader, который отвечает за чтение данных из источника. FilterReader выборочно обрабатывает данные, полученные от Reader, которым он управляет.

Исходный код класса FilterReader показывает: все методы, которые он наследует от родительского класса, были переопределены (override), чтобы действовать в качестве делегата объекта Reader, которым он управляет:
FilterReader class
package java.io;
public abstract class FilterReader extends Reader {
protected Reader in;
protected FilterReader(Reader in) {
super(in);
this.in = in;
}
public int read() throws IOException {
return in.read();
}
public int read(char cbuf[], int off, int len) throws IOException {
return in.read(cbuf, off, len);
}
public long skip(long n) throws IOException {
return in.skip(n);
}
public boolean ready() throws IOException {
return in.ready();
}
public boolean markSupported() {
return in.markSupported();
}
public void mark(int readAheadLimit) throws IOException {
in.mark(readAheadLimit);
}
public void reset() throws IOException {
in.reset();
}
public void close() throws IOException {
in.close();
}
}
FilterReader constructors
protected FilterReader(Reader in)
2. Examples
Например: Напишим подкласс FilterReader для чтения HTML-текста, но игнорируйте теги (tag).
RemoveHtmlTagReader.java
package org.o7planning.filterreader.ex;
import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
public class RemoveHtmlTagReader extends FilterReader {
private boolean intag = false;
public RemoveHtmlTagReader(Reader in) {
super(in);
}
// We override this method.
// The principle will be:
// Read only characters outside of the tags.
@Override
public int read(char[] buf, int from, int len) throws IOException {
int charCount = 0;
while (charCount == 0) {
charCount = super.read(buf, from, len);
if (charCount == -1) {
// Ends of
return -1;
}
int last = from;
for (int i = from; i < from + charCount; i++) {
// If not in tag
if (!this.intag) {
if (buf[i] == '<') {
this.intag = true;
} else {
buf[last++] = buf[i];
}
} else if (buf[i] == '>') {
this.intag = false;
}
}
charCount = last - from;
}
return charCount;
}
// Also need to override this method.
@Override
public int read() throws IOException {
char[] buf = new char[1];
int result = read(buf, 0, 1);
if (result == -1) {
return -1;
} else {
return (int) buf[0];
}
}
}
RemoveHtmlTagTest.java
package org.o7planning.filterreader.ex;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
public class RemoveHtmlTagTest {
public static void main(String[] args) throws IOException {
// Create a Reader.
Reader in = new StringReader("<h1>Hello \n <b>World</b><h1>");
RemoveHtmlTagReader filterReader = new RemoveHtmlTagReader(in);
BufferedReader br = new BufferedReader(filterReader);
String s = null;
while ((s = br.readLine()) != null) {
System.out.println(s);
}
br.close();
}
}
Output:
Hello
World
Руководства Java IO
- Руководство Java CharArrayWriter
- Руководство Java FilterReader
- Руководство Java FilterWriter
- Руководство Java PrintStream
- Руководство Java BufferedReader
- Руководство Java BufferedWriter
- Руководство Java StringReader
- Руководство Java StringWriter
- Руководство Java PipedReader
- Руководство Java LineNumberReader
- Руководство Java PushbackReader
- Руководство Java PrintWriter
- Руководство Java IO Binary Streams
- Руководство Java IO Character Streams
- Руководство Java BufferedOutputStream
- Руководство Java ByteArrayOutputStream
- Руководство Java DataOutputStream
- Руководство Java PipedInputStream
- Руководство Java OutputStream
- Руководство Java ObjectOutputStream
- Руководство Java PushbackInputStream
- Руководство Java SequenceInputStream
- Руководство Java BufferedInputStream
- Руководство Java Reader
- Руководство Java Writer
- Руководство Java FileReader
- Руководство Java FileWriter
- Руководство Java CharArrayReader
- Руководство Java ByteArrayInputStream
- Руководство Java DataInputStream
- Руководство Java ObjectInputStream
- Руководство Java InputStreamReader
- Руководство Java OutputStreamWriter
- Руководство Java InputStream
- Руководство Java FileInputStream
Show More