Java, Base64: Como escrever uma classe Base64OutputStream usando o Decorator Pattern

Baseado no meu original pergunta sobre a codificação RSA e Base64 e os comentários lá estou me perguntando qual é a melhor abordagem para escrever um Base64OutputStream (ou Input Stream). Originalmente, eu o chamei de Base64PrintWriter e o estendi do PrintWriter passando um PrintWriter para o Construto

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();
    }
}

Alterei minha implementação original para a acima e a inicializei com:

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

As minhas perguntas são:

Este é um bom design?Pode ser feito melhor? Apliquei o padrão decorador corretament É bom estender o FilteredOutputStream em vez do OutputStream?Orácul indica que está bom, mas ainda existem desvantagens ou razões para se estender do OutputStream?lém disso, devo decorá-lo com BufferedOutputStream quando chamo o construto

questionAnswers(4)

yourAnswerToTheQuestion