当前位置: 首页 > 知识库问答 >
问题:

字节与Oracle db和原始文件上的clob数据不同

阳凌
2023-03-14

我有一个png文件,它在oracle DB中存储为CLOB。

LobHandler lob = new DefaultLobHandler();
return jdbcTemplate.queryForObject(
  "select table from column",
  arr,
  (rs, rowNum) -> lob.getClobAsString(rs, "CLOB_DATA")
);
clob.getBytes(Charset.forName("windows-1252"));
File path = new File("path/to/file");
Files.readAllBytes(path.toPath());

共有1个答案

费秦迟
2023-03-14

我有一个png文件,它在oracle DB中存储为CLOB。

别这样。如果您有二进制数据,那么将其存储为二进制格式,例如blob,而不要将其存储为不用于此目的的格式。

然而,当我用下面的代码手动读取文件并与db数据进行比较时,我得到了不同的字节。

将它们全部更改为blob,然后在需要取出字符数据时将blob转换为clob。试图以相反的方式进行(不对二进制进行任何编码,可以安全地存储为字符串),将继续产生与您已经存在的问题类似的问题。

如果您确实必须使用clob(请不要),那么将二进制文件存储为一种编码格式,例如Base64,它可以安全地存储为字符数据。

 类似资料:
  • 我已经决定在我的服务中实现文件传输的加密。在此之前的文件传输是没有加密的,它们的发送和接收都是完美无缺的,字节数完全相同。 现在,我将和加密引入到混合加密中,以便在数据通过TCP协议时对其进行加密。我使用进行初始握手,将密钥传递给由公钥加密的另一方。从那时起,文件的接收方定期调用发送方,发送方生成一个新的,用密钥加密数据,并发送给接收方,由接收方使用IV和相同的密钥解密。 我使用的块大小为2MB,

  • 提前致谢 编辑:现在,我只是在流长度为奇数的情况下将缓冲区的大小增加1,然后将流以其自己的长度写入缓冲区,从而默认缓冲区的最后一个字节。请告知这样做的任何潜在错误: 再次感谢 编辑:以前的解决方案不起作用。新的方法包括将流传递给string,在字符串末尾添加空格,然后再次转换为stream。到现在都很好。很抱歉我不能发布代码...只是我不知道如何克服StackOverflow中代码的4个空格的策略

  • 我正在使用ADB拍摄android设备的屏幕截图,并将屏幕截图作为原始字节数据接收。 我知道通过的原始字节数据是rgba格式的 红色偏移量为0,绿色偏移量为8,蓝色偏移量为16,Alpha偏移量为24,每个值为1字节。这构成了整个字节数组。 我正在尝试将这个字节数组转换为C#中的位图,它在大多数情况下都工作正常,图像在各个方面看起来都是正确的,除了它带有一个“蓝色色调”——颜色是关闭的。 以下是我

  • 接口说明 删除指定的素材的原始数据文件,只要管理员才能操作 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/server/1.0.0/deleteZip 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 dataGuid string form 是 素材id validCode string form

  • 问题内容: 我想压缩一些数据,所以遇到了DeflatorInputStream和DeflatorOutputStream类。但是,以下示例表明,使用这些类时,我似乎无法重建原始数据。 当我切换到ZipInputStream和ZipOutputStream时,它确实可以工作,但是由于我本身不需要zip文件,因此我认为通用压缩会更好。我主要是想了解为什么这个例子不起作用。 问题答案: 责备历史先例。在

  • 我正在尝试传递一个位于我的应用程序的res/raw目录中的图像以及共享意图。 我遵循了FileProvider文档中描述的流程,下面是我的代码: Androidanifest.xml 我的活动中的代码: 由于无法访问我在其他应用程序中获取的文件,因此上述操作无效: java.io.FileNotFoundException:FILE_PATH:打开失败: EACCES(权限拒绝) 知道我做错了什么