当前位置: 首页 > 面试题库 >

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

东方和煦
2023-03-14
问题内容

基于我最初关于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装饰它?

问题答案:

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



 类似资料:
  • 问题内容: 我简要阅读了有关Maxine的信息,这是一个用Java编写的开源JVM实现。这对我来说听起来很圆。如果java要求运行虚拟机,那么如何用Java编写虚拟机本身(VM代码是否需要运行VM的虚拟机,依此类推?)。 编辑 :好的,所以我看到我忽略了Java不必在VM中运行的事实。那如何解释如何用LISP编写LISP编译器呢?还是这完全是一个新问题? 问题答案: 最初,您认为Java需要虚拟机

  • 我知道,有很多关于这个主题的线索--我读过大部分,但没有一个给我正确的答案。 由于该更改,我不得不向base64.decode和base64.encode添加一个标志。解码效果良好: 但是当向base64.encode添加标志时,奇怪的事情发生了: 当我写“return base64.encode(”)时,Android Studio告诉我它需要一个byte[]输入和一个int标志。所以我想,我可

  • 问题内容: 我有以下代码来创建和更新xml文件: 这将生成以下xml文件: 问题是:是否可以使用此方法/技术添加CDATA以在下面创建xml代码? 问题答案: 得到它了!我从这个很棒的解决方案改编了代码: 生成的XML文件:

  • 本文向大家介绍如何使用nodejs对base64进行编解码?相关面试题,主要包含被问及如何使用nodejs对base64进行编解码?时的应答技巧和注意事项,需要的朋友参考一下 轮子, https://www.npmjs.com/package/js-base64

  • 问题内容: 一切在命令行上都可以正常运行,但是当我将所需的内容转换为Java时,接收过程在stdin上什么都收不到。 这是我所拥有的: 脚本“ count-the-bytes”很简单: 输出表明该函数挂在’wc -c’行-永远不会到达’counted stdin bytes’行。 这是怎么回事?使用Jsch会有所帮助吗? 问题答案: 您可能希望在wc -c返回之前尝试关闭输出流。

  • 我需要用电子邮件和密码提出请求。电子邮件和密码是发送到我的存储库类的字符串。密码需要用Base64编码。 我正在使用改装2。 我知道我需要使用类,但是我怎么才能发出请求呢? 这是来自 Rest 接口的代码: 在存储库中,我用这个对密码进行编码: 但是我需要用email和encodedPassword变量初始化requestBody来发出请求。 这真的是正确的方法吗? requestBody属性是如