图像的字节数组以字符串形式存储,如何将其返回字节数组

时间:2019-05-07 12:12:27

标签: java android arrays spring

我将android作为前端,将Spring与Hibernate作为后端。我发送图像的字节数组以存储在该实体中:

public class ApplicationUser {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Lob
    @Column(name = "image_bytes", columnDefinition="BLOB")
    private byte[] imageBytes;
}

但是,在H2控制台中,我可以看到它以字符串形式存储了数百个字符,因此我询问字节数组已以某种方式转换为字符串。所以我的问题:

  • 为什么会这样?为什么将它存储为字符串?为什么不按原样存储字节数组?
  • 如果必须将其存储为字符串,那么如何将其解码回正确的字节数组?如果我使用字符串,并执行myStringThatGotReturned.getBytes(),则会得到一个不同的字节数组(因此,基本上我不会获得正确的图像)。我想我没有以正确的方式对其进行解码。有什么办法可以弄清楚如何将该字符串解码回发送给后端的字节数组?

2 个答案:

答案 0 :(得分:1)

这是一个 JSON 转换问题。由于JSON是一种文本格式,因此通常使用数字,大写字母,小写字母和两个符号+ / = 64个“数字”将每个字节代表6位转换为类似字节的二进制数据。

因此,JSON库的处理可能已经起作用。您可以使用

自己转换String值
bytes[] b = Base64.getDecoder().decode(str);

答案 1 :(得分:0)

您可以尝试以下方法之一:

byte[] b = string.getBytes();
byte[] b = string.getBytes(Charset.forName("UTF-8"));
byte[] b = string.getBytes(StandardCharsets.UTF_8);