Java,Base64 : How to write a Base64OutputStream class using Decorator Pattern

标签 java base64 decorator

基于我原来的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());

我的问题是:

  1. 这是一个好的设计吗?
  2. 可以做得更好吗?
  3. 我是否正确应用了装饰器模式。
  4. 扩展 FilteredOutputStream 而不是 OutputStream 好吗? Oracle表明它很好,但是有什么缺点或仍然从 OutputStream 扩展的理由吗?
  5. 当我调用构造函数时,我是否应该另外用 BufferedOutputStream 来装饰它?

最佳答案

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

关于Java,Base64 : How to write a Base64OutputStream class using Decorator Pattern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8896237/

相关文章:

java - 当语言被覆盖时搜索停用词无法按预期工作

java - 如何给 ImageIcon 着色

c# - 数字大于 255 的 Convert.ToBase64String()

php - 使用 PHP 在 MySQL 表中搜索 Base64 字符串

python - 在类中声明装饰器

java - 无法在 Visual Studio Code 中运行 java 代码

java - Java 中使用反斜杠零作为分隔符分隔文本

java - 为什么使用 Base64 加密时 Long.valueOf(stateMap.get ("time")) 给出 java.lang.ClassCastException

c# - 如何在责任链中注入(inject)下一个处理程序的依赖?

c# - 这是什么设计模式,这是一个好主意吗? (C#)