【问题标题】:How to convert byte array to base64 String如何将字节数组转换为base64字符串
【发布时间】:2016-10-21 18:01:57
【问题描述】:
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 也不会打印。

【问题讨论】:

  • 有没有异常,代码卡在哪里了?
  • 另一个将字节数组转换为base64字符串的选项是Base64.encode(imgData)
  • 你好凯文,我没有得到任何异常,从数据库我得到图像列表,如果我 sysout 只打印列表中的最后一个图像,以及为什么 sysout (lists.size());没有打印,我唯一得到的是最后一张图片被转换为base64,我需要列表中的所有图片。

标签: java


【解决方案1】:

首先,这是错误的:

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 编码和解码的类。

【讨论】:

  • 我使用 java 1.7,Base64.getEncoder() 这个方法在 import org.apache.commons.codec.binary.Base64 中不可用,请告诉我需要什么 jar。
  • youtube.com/watch?v=t7g06nzlkjo,请看这个视频,因为我还有问题
【解决方案2】:

在 java 1.8 之前使用 apache commons library

String base64 = new String(Base64.encodeBase64(imgData))

【讨论】:

    【解决方案3】:

    如果您使用的是 Android,您可以通过导入 Android 版本的 Base64 class 来使用以下代码:

    Base64.encodeToString(payload, Base64.DEFAULT);
    

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

    【讨论】:

      【解决方案4】:

      在android中,可以使用Base64(android.util.Base64)将byte[]编码为String;

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

      解码部分如下;

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

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

      【讨论】:

        猜你喜欢
        • 2012-07-21
        • 2017-05-21
        • 1970-01-01
        • 2016-10-21
        • 2011-09-21
        • 1970-01-01
        • 2017-07-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多