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


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

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

我用的是Eclipse.Eclipse将此行标记为错误.我导入了所需的库:

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

但同样,它们都显示为错误.我找到了a similar post here个.

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

import org.apache.commons.*;

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

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

推荐答案

您需要更改类的导入:

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

那就读why you shouldn't use sun.* packages.


更新(2016-12-16)

You can now use java.util.Base64 with Java 8. First, import it as you normally do:

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

有关更多信息,请参见Java documentation for Base64.

Java相关问答推荐

如何在Spring Security中设置CustomLogin路径?

Java 22模式匹配不适用于记录模式匹配.给出汇编问题

BiPredicate和如何使用它

为什么如果数组列表中有重复项,我的代码SOMETIMES不返回true?

Java取消任务运行Oracle查询通过JDBC—连接中断,因为SQLSTATE(08006),错误代码(17002)IO错误:套接字读取中断

Java WireMock定义存根在Cucumber并行执行的多线程测试中失败

如何调整工作时间日历中的时间

计算两个浮点数之间的距离是否对称?

Spring Data JPA慢慢地创建了太多非活动会话

在向WebSphere中的文档添加元素时iText挂起

Domino Designer 14中的保存代理添加了重影库

在添加AdMob时无法为Google Play构建应用程序包:JVM垃圾收集器崩溃和JVM内存耗尽

如何在运行docker的应用程序中获取指定的配置文件

如何处理两个几乎相同的XSD文件?

使用MediaPlayer类在一段时间后停止播放音乐

如何使用Java对随机生成的字母数字优惠券代码进行过期设置

TinyDB问题,无法解析符号';上下文&

我无法在我的Spring Boot应用程序中导入CSV依赖项

如何用Micrometer&;斯普肯

将天数添加到ZonedDateTime不会更改时间