Java,Base64:如何使用Decorator Pattern编写Base64OutputStream类

基于我原来的question about RSA and Base64 encoding和评论,我想知道编写Base64OutputStream(或输入流)的最佳方法是什么.我最初将其称为Base64PrintWriter,并将其从PrintWriter扩展为传递PrintWriter到构造函数.

import org.bouncycastle.util.encoders.Base64;

public class Base64OutputStream extends FilterOutputStream {

    public Base64OutputStream(OutputStream out) {
        super(out);
    }

    public void write(byte[] decodedBytes) throws IOException {
        byte[] base64Message = Base64.encode(decodedBytes);
        super.write(base64Message);
    }

    public void writeln(byte[] decodedBytes) throws IOException {
        write(decodedBytes);
        super.write("\n".getBytes());
        super.flush();
    }
}

我将原始实现更改为上述实现,并使用以下代码对其进行了初始化:

Base64OutputStream base64encoder = new Base64OutputStream(socket.getOutputStream());

我的问题是:

>这是一个好的设计吗?
>可以做得更好吗?
>我是否正确应用了装饰器图案.
>扩展FilteredOutputStream而不是OutputStream是否很好? Oracle表示它很好,但是仍然有任何缺点或原因可以从OutputStream扩展吗?
>调用构造函数时,是否还应该使用BufferedOutputStream装饰它?

解决方法:

如果您适合使用开放源代码,则可以查看Apache Commons Codec.它包含一个应该满足您需要的Base64OutputStream.

上一篇:python中的装饰器与在函数上调用函数完全相同吗?


下一篇:python – 如何修改类__dict__(mappingproxy)?