【问题标题】:Java - The method encodeBase64Java - 方法 encodeBase64
【发布时间】:2015-04-27 04:44:07
【问题描述】:

我有一个字符串 String x = "Sample text";,我想打印它的 base64 加密。正如许多例子所提到的,我使用:

byte[] encodedBytes = Base64.encodeBase64(x.getBytes());
System.out.println("encodedBytes " + new String(encodedBytes));

但这给了我The method encodeBase64(byte[]) is undefined for the type Base64...这是为什么呢?

【问题讨论】:

  • 你的Base64来自哪个包?
  • 嗯?我不知道那是什么意思...我只是按照建议添加了import java.util.Base64; =/
  • Base64 不是加密,它是(二进制到文本)编码

标签: java encoding base64


【解决方案1】:

您应该简单地将 Apache commons 编解码器模块包含到您的类路径中,而不是重写代码。这具有确切的方法签名,Base64.encodeBase64(byte[])。是的,只需在互联网搜索中点击“encodeBase64”就足够了。

请注意,您的项目可能会使用同一编解码器包中的其他功能。因此,在开始替换代码之前,您应该始终首先尝试查找项目使用的模块/库。有时实现之间存在细微差别,这可能会导致项目在适当的情况下失败。

也就是说,问题中的代码当然没有意义。您可以使用encodeBase64String 直接转换为String,而无需转换为字节然后再转换为String。对于较新级别的 API,确实有 java.util.Base64 类,如 the other answer 中所述。最后 - 更重要的是 - 如果x 已经包含一个字符串,为什么还要对它进行 base 64 编码?

【讨论】:

    【解决方案2】:

    encode 方法在 Base64.Encoder 类中,您可以通过运行 Base64.getEncoder() 获得。

    byte[] encodedBytes = Base64.getEncoder().encode(x.getBytes());
    

    同样,解码:

    String originalString = new String(Base64.getDecoder().decode(encodedBytes));
    

    查看the Base64 javadocs 了解更多信息。

    【讨论】:

    • 如果我没记错的话,上面的解码语句调用变量'encodedBytes'就像一个函数'encodedBytes()'。请去掉最后的括号。
    • @Ramraj 提到的问题已通过此编辑修复:stackoverflow.com/revisions/29887426/2
    • 将编码字节转换为字符串,只需传入新的 String() 构造函数参数。新字符串(编码字节)
    【解决方案3】:

    你也可以使用:

    byte[] originalString = Base64.getDecoder().decode(encodedBytes);
    

    解码(这是我最近写的 Base64 编码器/解码器小程序中使用的)

    【讨论】:

      【解决方案4】:

      我有点解决它,但检查它是否有效

      decode.setText(new String(Base64.decode(inputText.getText().toString(), Base64.DEFAULT)));

      如果它不起作用,请告诉我

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-27
        • 1970-01-01
        • 2020-04-30
        • 2020-01-30
        相关资源
        最近更新 更多