如何将字节数组转换为Base64字符串

4
List<Map<String, Object>> lists = baseDao.getJdbcTemplate().queryForList(queryForImages, productId);
        **System.out.println("size----" + lists.size());**
        ArrayList<String> arrayList = new ArrayList<String>();
        for (Map<String, Object> base64 : lists) {
            byte[] imgData = (byte[]) base64.get("images");
            String base64Encoded = new String(imgData, StandardCharsets.UTF_8);
            // byte[] encodedImage = Base64.encodeBase64(imgData);
            System.out.println("encoded---2" + base64Encoded);
        }

我从数据库中检索图像列表,并将字节数组转换为Base64字符串。如果我只在sysout中打印最后一张图片,则仅打印列表中的最后一张图片,即使在方法下面的sysout列表大小也不会被打印出来。

有没有异常,代码在哪里卡住了? - wake-0
1
将字节数组转换为Base64字符串的另一种选项是使用Base64.encode(imgData)。 - PVR
你好 Kevin,我没有收到任何异常。从数据库中获取图像列表,如果我只打印列表中的最后一张图片,则只会打印出最后一张图片,而为什么 sysout(lists.size()) 不打印呢?唯一的事情是最后一张图片被转换为 base64,我需要所有列表中的图片。 - cool rock
请观看此视频:https://www.youtube.com/watch?v=t7g06nzlkjo - cool rock
4个回答

13

首先,这是错误的

String base64Encoded = new String(imgData, StandardCharsets.UTF_8);
你拥有的图像字节不代表UTF-8编码的文本,因此将字节创建成伪装成UTF-8编码文本的String没有任何意义。
如果你使用Java 8,则应该使用标准库中可用的Base64类。
import java.util.Base64;

// ...

byte[] imgData = (byte[]) base64.get("images");

String base64Encoded = Base64.getEncoder().encodeToString(imgData);

如果您不使用Java 8,您可以使用第三方库,例如Apache Commons Codec,它包含用于Base64编码和解码的类。


我使用的是Java 1.7版本,但是在导入org.apache.commons.codec.binary.Base64时,无法找到Base64.getEncoder()这个方法。请告诉我需要哪个JAR文件。 - cool rock
请观看此视频 https://www.youtube.com/watch?v=t7g06nzlkjo ,因为我仍然有问题。 - cool rock

13

在安卓中,您可以使用 Base64(android.util.Base64)将 byte[] 编码为字符串;

String encodedString = Base64.encodeToString(byteArray, Base64.DEFAULT);

并且

将部分解码如下;

byte[] byteArray = org.apache.commons.codec.binary.Base64.decodeBase64(encodedString);

通常在安卓应用程序中使用这种技术将二进制文件/数据发送到服务器,使用Web服务;


4

如果你正在使用Android,你可以通过导入Base64类的Android版本来使用以下代码:

Base64.encodeToString(payload, Base64.DEFAULT);

自Android API 26开始,您也可以使用java.util.Base64。

3
在Java 1.8之前,使用Apache Commons库
String base64 = new String(Base64.encodeBase64(imgData))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接