gpt4 book ai didi

java - 使用 jpa 从 postgres 读取 byte[] 时长度几乎翻倍

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:01:23 28 4
gpt4 key购买 nike

我有一个 Image 类,它有一个 byte[] 来包含实际的图像数据。我可以在我的网络应用程序中上传和插入图片。当我尝试从 JPA 读取图像后显示图像时,我的 byte[] 的长度总是 2x-1 或 2x-2,其中 x 是 postgres 9 中 bytea 字段的长度。显然浏览器不会显示图片说它已损坏。我可以借助一些帮助来弄清楚为什么我得到的(大约)是我预期的两倍。这是我的图像类的映射。将 eclipselink 与 JPA 2 结合使用,在 Mac 上运行 postgres 9。

当我使用

从数据库中选择时
select *, length(bytes) from image;

我得到的长度是 9765。在我的 Controller 的一个断点中,byte[] 长度是 19529,比数据库中的长度少一个字节。

@Entity
@Table( name = "image" )
@SequenceGenerator( name = "IMAGE_SEQ_GEN", sequenceName = "IMAGE_SEQUENCE" )
public class Image
extends DataObjectAbstract<Long>
{
@Id
@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "IMAGE_SEQ_GEN" )
private Long key;

@Column( name="content_type" )
private String contentType;

@Lob
@Basic( optional=false )
@Column( name="bytes" )
private byte[] bytes;

// constructor and getters and setters

}

pgadmin 向我展示了图像表的以下内容

CREATE TABLE image
(
"key" bigint NOT NULL,
bytes bytea,
content_type character varying(255),
"version" integer,
CONSTRAINT image_pkey PRIMARY KEY (key)
)
WITH (
OIDS=FALSE
);

最佳答案

“bytea_output = escape”只是一种解决方法,Postgres 8.0 将 bytea 编码更改为十六进制。

使用 9.0-dev800 之后的最新 JDBC 驱动程序(9.0 Build 801 目前是最新的),问题将得到解决。

关于java - 使用 jpa 从 postgres 读取 byte[] 时长度几乎翻倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6181524/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com