小编典典

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

java

基于我最初关于RSA和Base64编码的问题以及评论,我想知道编写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());

我的问题是:

  1. 这是一个好的设计吗?
  2. 能做得更好吗?
  3. 我是否正确应用了装饰器模式。
  4. 扩展FilteredOutputStream而不是OutputStream是否很好?Oracle表示这很好,但是仍然可以从OutputStream扩展吗?
  5. 当我调用构造函数时,是否还应该使用BufferedOutputStream装饰它?

阅读 278

收藏
2020-11-23

共1个答案

小编典典

如果您愿意使用开放源代码,可以查看Apache Commons
Codec
。它包含应该满足您需求的Base64OutputStream

2020-11-23