在 Java 中编码为 Base64

2022-08-31 04:47:19

我需要用Java的Base64编码对一些数据进行编码。我该怎么做?提供 Base64 编码器的类的名称是什么?


我试图使用这个类,但没有成功。我有以下一行Java 7代码:sun.misc.BASE64Encoder

wr.write(new sun.misc.BASE64Encoder().encode(buf));

我正在使用Eclipse。Eclipse 将此行标记为错误。我导入了所需的库:

import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;

但同样,它们都显示为错误。我在这里找到了类似的帖子

我使用Apache Commons作为解决方案的建议,包括:

import org.apache.commons.*;

并导入从以下位置下载的 JAR 文件:http://commons.apache.org/codec/

但问题仍然存在。Eclipse 仍然显示前面提到的错误。我该怎么办?


答案 1

您需要更改类的导入:

import org.apache.commons.codec.binary.Base64;

然后更改您的类以使用 Base64 类。

下面是一些示例代码:

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

然后阅读为什么你不应该使用 sun.* 软件包


更新 (2016-12-16)

您现在可以与 Java 8 一起使用。首先,像往常一样导入它:java.util.Base64

import java.util.Base64;

然后按如下方式使用 Base64 静态方法:

byte[] encodedBytes = Base64.getEncoder().encode("Test".getBytes());
System.out.println("encodedBytes " + new String(encodedBytes));
byte[] decodedBytes = Base64.getDecoder().decode(encodedBytes);
System.out.println("decodedBytes " + new String(decodedBytes));

如果您直接想要对字符串进行编码并将结果作为编码字符串获取,则可以使用以下方法:

String encodeBytes = Base64.getEncoder().encodeToString((userName + ":" + password).getBytes());

有关详细信息,请参阅 Base64 的 Java 文档


答案 2

使用 Java 8 的永不过分加入乐趣的类:java.util.Base64

new String(Base64.getEncoder().encode(bytes));