Hướng dẫn và ví dụ Java FilterWriter
1. FilterWriter
FilterWriter là một lớp con trừu tượng của lớp Writer. Nó là lớp cơ sở để tạo ra các lớp con được sử dụng để ghi một cách có chọn lọc các ký tự theo yêu cầu.
FilterWriter không trực tiếp ghi các ký tự vào mục tiêu (chẳng hạn file), thay vào đó nó quản lý một Writer khác chịu trách nhiệm ghi dữ liệu vào mục tiêu. FilterWriter lọc hoặc chế biến các ký tự ghi vào nó, sau đó ghi kết quả sang Writer mà nó quản lý.
Nhìn vào mã nguồn của lớp FilterWriter cho thấy: Tất cả các phương thức mà nó thừa kế từ lớp cha đã được ghi đè (override) để hoạt động như một người uỷ quyền của đối tượng Writer mà nó quản lý:
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 là một mật mã thay thế chữ cái (letter substitution cipher) đơn giản, nó thay thế mỗi chữ cái bởi một chữ cái khác đứng sau nó 13 vị trí trên bảng chữ cái. ROT13 là một trường hợp đơn giản của mật mã Caesar (Caesar cipher).
Dưới đây là bảng các chữ cái và các chữ cái thay thế tương ứng của chúng, kết quả của việc sử dụng thuật toán ROT13.
Bảng chữ cái Latinh cơ bản có 26 chữ cái (2x13), nên về cơ bản thuật toán ROT13 sẽ biến đổi một chữ cái thành một chữ cái khác, và sử dụng chính thuật toán này để đảo ngược kết quả. Chẳng hạn thuật toán ROT13 biến chữ "A" thành "N", và sử dụng thuật toán ROT13 cho "N" để có kết quả "A".
ROT13 thường được coi là một ví dụ điển hình về một mật mã hoá (encryption) yếu.
Lớp ROT13 dưới đây cung cấp một phương thức tĩnh rotate(int) chấp nhận đầu vào là một chữ cái và trả về một chữ cái thay thế theo thuật toán ROT13:
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);
}
}
}
Viết lớp ROT13Writer mở rộng từ lớp FilterWriter. Các ký tự được ghi vào ROT13Writer sẽ bị thay thế theo thuật toán ROT13:
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);
}
}
Ví dụ sử dụng 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
Ví dụ sử dụng ROT13Writer ghi dữ liệu vào file:
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
Các hướng dẫn Java IO
- Hướng dẫn và ví dụ Java CharArrayWriter
- Hướng dẫn và ví dụ Java FilterReader
- Hướng dẫn và ví dụ Java FilterWriter
- Hướng dẫn và ví dụ Java PrintStream
- Hướng dẫn và ví dụ Java BufferedReader
- Hướng dẫn và ví dụ Java BufferedWriter
- Hướng dẫn và ví dụ Java StringReader
- Hướng dẫn và ví dụ Java StringWriter
- Hướng dẫn và ví dụ Java PipedReader
- Hướng dẫn và ví dụ Java LineNumberReader
- Hướng dẫn và ví dụ Java PushbackReader
- Hướng dẫn và ví dụ Java PrintWriter
- Hướng dẫn sử dụng luồng vào ra nhị phân trong Java
- Hướng dẫn sử dụng luồng vào ra ký tự trong Java
- Hướng dẫn và ví dụ Java BufferedOutputStream
- Hướng dẫn và ví dụ Java ByteArrayOutputStream
- Hướng dẫn và ví dụ Java DataOutputStream
- Hướng dẫn và ví dụ Java PipedInputStream
- Hướng dẫn và ví dụ Java OutputStream
- Hướng dẫn và ví dụ Java ObjectOutputStream
- Hướng dẫn và ví dụ Java PushbackInputStream
- Hướng dẫn và ví dụ Java SequenceInputStream
- Hướng dẫn và ví dụ Java BufferedInputStream
- Hướng dẫn và ví dụ Java Reader
- Hướng dẫn và ví dụ Java Writer
- Hướng dẫn và ví dụ Java FileReader
- Hướng dẫn và ví dụ Java FileWriter
- Hướng dẫn và ví dụ Java CharArrayReader
- Hướng dẫn và ví dụ Java ByteArrayInputStream
- Hướng dẫn và ví dụ Java DataInputStream
- Hướng dẫn và ví dụ Java ObjectInputStream
- Hướng dẫn và ví dụ Java InputStreamReader
- Hướng dẫn và ví dụ Java OutputStreamWriter
- Hướng dẫn và ví dụ Java InputStream
- Hướng dẫn và ví dụ Java FileInputStream
Show More
- Hướng dẫn lập trình Java Servlet/JSP
- Các hướng dẫn Java New IO
- Các hướng dẫn Spring Cloud
- Các hướng dẫn Java Oracle ADF
- Các hướng dẫn Java Collections Framework
- Java cơ bản
- Các hướng dẫn Java Date Time
- Các thư viện mã nguồn mở Java
- Các hướng dẫn Java Web Services
- Các hướng dẫn Struts2 Framework
- Các hướng dẫn Spring Boot