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);
}
我从db检索图像列表并将字节数组转换为base64字符串,如果我sysout只将列表中的最后一个图像打印在sysout中,甚至sysout list.size下的方法都不打印。
答案 0 :(得分:3)
首先,这是错误的:
String base64Encoded = new String(imgData, StandardCharsets.UTF_8);
您拥有的图像字节不代表UTF-8编码文本,因此从字节中创建String
毫无意义,假装这是UTF-8编码文本。
如果您使用的是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编码和解码的类。
答案 1 :(得分:3)
在java 1.8之前使用apache commons library
String base64 = new String(Base64.encodeBase64(imgData))
答案 2 :(得分:2)
在android中,您可以使用Base64(android.util.Base64)将byte []编码为字符串;
String encodedString = Base64.encodeToString(byteArray, Base64.DEFAULT);
和
解码部分,如下所示;
byte[] byteArray = org.apache.commons.codec.binary.Base64.decodeBase64(encodedString);
通常,这种技术在android应用中用于通过Web服务将二进制文件/数据发送到服务器;
答案 3 :(得分:0)
如果您使用的是Android,则可以通过导入Base64 class的Android版本来使用以下代码:
Base64.encodeToString(payload, Base64.DEFAULT);
在Android API 26中,您也可以使用java.util.Base64。