从Postgres数据库检索时,字节数组的java大小增加了一倍
我正在使用JSF2。0,jetty服务器和Postgres数据库。我想以字节数组的形式将mp3文件存储在数据库中。我上传了mp3文件的字节数组。但当我从数据库中检索相同的字节数组时,我得到的字节数组的大小是我的两倍,因为我的mp3文件不能正常工作
public void updateAnnouncementDetail(AnnouncementDetail announcementDetail) {
System.out.println("Upload byte array size:" + announcementDetail.getContent().length);
Session sess=get Session();
sess.beginTransaction();
sess.save(announcementDetail);
sess.getTransaction().commit();
AnnouncementDetail detail;
detail = retrieveAnnouncementDetailById(new AnnouncementDetailPK(announcementDetail.getAnnouncementDetailPK().getAnnouncement(), announcementDetail.getAnnouncementDetailPK().getLanguage()));
System.out.println("Retrived byte array size:" + detail.getContent().length);
}
输出:
上传字节数组大小:384440
检索的字节数组大小:768879
我不知道为什么会这样。我正在存储字节数组,在下一行中我正在检索它。但我得到的字节数组大小是原来的两倍。如果你需要更多的细节,请告诉我
# 1 楼答案
博士后9。x bytea值的默认输出为十六进制。因此,请尝试:
ALTER DATABASE database_name SET bytea_output = 'escape';
# 2 楼答案
在Postgres中处理二进制数据时,使用适当的数据绑定非常重要
首先,数据列的类型必须为
BYTEA
。是这样吗要存储数据,请使用准备好的语句,并确保调用
setBinaryStream()
:要检索数据,还可以使用准备好的语句并使用
getBytes()
:请参阅更多here