codestory

Die Anleitung zu Java FilterWriter

  1. FilterWriter
  2. Examples

1. FilterWriter

FilterWriter ist eine abstrakte Unterklasse der Klasse Writer. Es ist die Basisklasse zum Erstellen der Unterklassen, mit denen die erforderlichen Zeichen selektiv geschrieben werden.
FilterWriter schreibt keine Zeichen direkt in das Ziel (z.B Datei), sondern verwaltet einen anderen Writer, der für das Schreiben der Daten in das Ziel verantwortlich ist. FilterWriter filtert oder verarbeitet die darauf geschriebenen Zeichen und schreibt die Ergebnisse im Writer,den er verwaltet.
Sehen Sie sich den Quellcode von der Klasse FilterWriter an: Alle Methoden, die sie von der Oberklasse erbt, werden überschrieben, um als Proxy für das verwaltete Objekt Writer zu fungieren:
FilterWriter
public abstract class FilterWriter extends Writer {  
    protected Writer out;
    
    protected FilterWriter(Writer out) {
        super(out);
        this.out = out;
    }
    public void write(int c) throws IOException {
        out.write(c);
    }
    public void write(char cbuf[], int off, int len) throws IOException {
        out.write(cbuf, off, len);
    }
    public void write(String str, int off, int len) throws IOException {
        out.write(str, off, len);
    }
    public void flush() throws IOException {
        out.flush();
    }
    public void close() throws IOException {
        out.close();
    }
}
FilterWriter constructors
protected FilterWriter(Writer out)

2. Examples

ROT13 ist eine einfache Buchstabenersatz-Schiffre (letter substitution cipher), die jeden Buchstaben durch einen anderen Buchstaben 13 im Alphabet ersetzt. ROT13 ist ein einfacher Fall der Caesar cipher.
Unten ist das die Tabelle mit Buchstaben und den entsprechenden alternativen Buchstaben, die Ergebnisse der Verwendung von Algorithmus ROT13.
Das grundlegende Alphabet Latinh hat 26 Buchstaben (2x13), daher konvertiert der ROT13 Algorithmus gründsätzlich einen Buchstaben in einen anderen und verwendet denselben Algorithmus, um die Ergebnisse umzukehren. Beispielsweise wandelt der Algorithmus ROT13 den Buchstabe "A" in "N" um und verwendet den Algorithmus ROT13 für "N" um das Ergebnis "A" zu erhalten.
ROT13 wird normalerweiset ein typisches Beispiel für ein schlechte Verschlüsselung (encryption).
Die folgende Klasse ROT13 bietet eine statische Methode rotate(int) , die eine Eingabe als eine Buchstabe akzeptiert und einen alternativen Buchstabe nach dem Algorithmus ROT13 zurückgibt:
ROT13.java
package org.o7planning.filterwriter.ex;

public class ROT13 {

    /**
     * <pre>
     *   a <==> n
     *   b <==> o
     *   c <==> p
     *   d <==> q
     *   e <==> r
     *   ...
     *   y <==> l
     *   z <==> m
     * </pre>
     */
    public static int rotate(int inChar) {
        int outChar;

        if (inChar >= (int) 'a' && inChar <= (int) 'z') {
            outChar = (((inChar - 'a') + 13) % 26) + 'a';
        } else if (inChar >= (int) 'A' && inChar <= (int) 'Z') {
            outChar = (((inChar - 'A') + 13) % 26) + 'A';
        } else {
            outChar = inChar;
        }
        return outChar;
    }

    // Test
    public static void main(String[] args) {
        for (char ch = 'a'; ch <= 'z'; ch++) {
            char m = (char) rotate(ch);
            System.out.println(ch + " ==> " + m);
        }
        System.out.println(" --- ");
        for (char ch = 'A'; ch <= 'Z'; ch++) {
            char m = (char) rotate(ch);
            System.out.println(ch + " ==> " + m);
        }
    }
}
Schreiben Sie die Klasse ROT13Writer, die aus der Klasse FilterWriter erweitert. Die im ROT13Writer geschriebenen Zeichen werden nach dem Algorithmus ROT13 ersetzt:
ROT13Writer.java
package org.o7planning.filterwriter.ex;

import java.io.FilterWriter;
import java.io.IOException;
import java.io.Writer;
 
public class ROT13Writer extends FilterWriter {
 
    public ROT13Writer(Writer out) {
        super(out);
    }  
    
    @Override
    public void write(int outChar) throws IOException {
        super.write(ROT13.rotate(outChar));
    }
 
    @Override
    public void write(char[] cbuf, int offset, int length) throws IOException {
        char[] tempbuf = new char[length];
        for (int i = 0; i < length; i++) {
            tempbuf[i] = (char) ROT13.rotate(cbuf[offset + i]);
        }
        super.write(tempbuf, 0, length);
    }  
    
    @Override
    public void write(String str, int off, int len) throws IOException {
        char[] cbuf = str.toCharArray();
        this.write(cbuf, off, len);
    }
}
Das Beispiel für die Verwendung von ROT13Writer:
ROT13WriterTest1.java
package org.o7planning.filterwriter.ex;

import java.io.FilterWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;

public class ROT13WriterTest1 {

    public static void main(String[] args) throws IOException {
        Writer targetWriter = new StringWriter();
        FilterWriter filterWriter = new ROT13Writer(targetWriter);
        
        String inputString = "Hello";
        
        filterWriter.write(inputString);
        filterWriter.close();
        
        String outputString = targetWriter.toString();
        System.out.println(inputString + " ==> " + outputString);
    }
}
Output:
Hello ==> Uryyb
Z.B: Das Verwendung von ROT13Writer zum Schreiben von Daten in die Datei:
ROT13WriterTest2.java
package org.o7planning.filterwriter.ex;

import java.io.File;
import java.io.FileWriter;
import java.io.FilterWriter;
import java.io.IOException;
import java.io.Writer;

public class ROT13WriterTest2 {

    public static void main(String[] args) throws IOException {
        // Windows: C:/somedir/rot13-out-file.txt
        File outFile = new File("/Volumes/Data/test/rot13-out-file.txt");
        outFile.getParentFile().mkdirs();
        
        Writer targetWriter = new FileWriter(outFile);
        FilterWriter filterWriter = new ROT13Writer(targetWriter);
        
        String inputString = "Uryyb";
        
        filterWriter.write(inputString);
        filterWriter.close();
    }
}
Output:
rot13-out-file.txt
Hello

Die Anleitungen Java IO

Show More