当前位置: 首页 > news >正文

kingbase读取blob,下载文件注意事项

1,问题定位
 

 由于人大金仓存储的blob是16进制,且前后前后还包含了0字节。导致我们原先下载文件的方法有异常。


2,解决方案

在业务输出的时候,判断是否是人大金仓数据库,如果是人大金仓数据库,就进行转换,如果不是人大金仓就走原先的流程。


DbUtils.java 转换方法提取到公共包 

@Component
public class DbUtils {private static final Logger LOGGER = LoggerFactory.getLogger(DbUtils.class);@Value("${spring.datasource.driver-class-name:}")private String driverClassName;/*** 转换blob* 将十六进制字符串转byte* @param data* @return*/public  byte[] converBlob(byte[] data) {//如果是kingBase这边获取blob的时候,需要进行转换下,把头尾都截取了,再把16进制转2进制if(StringUtils.isNotEmpty(driverClassName) && Constant.KING_BASE_DRIVER_NAME.equals(driverClassName)) {String s = new String(data);byte[] baKeyword = new byte[s.length() / 2];for (int i = 1; i < baKeyword.length; i++) {try {baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));} catch (Exception e) {LOGGER.error("转换blob异常",e);}}if (baKeyword.length > 1) {byte[] newByte = new byte[baKeyword.length-1];System.arraycopy(baKeyword, 1, newByte, 0, newByte.length);return newByte;}return baKeyword;}else{return data;}}}


http://www.mrgr.cn/news/16716.html

相关文章:

  • 没有永远免费的加速器,但是永远有免费的加速器【20240831更新】
  • 基于STM32校车安全监控系统的设计(论文+源码+实物)
  • redis面试官经常问的问题
  • 认知杂谈32
  • 秋风送爽,夏意未央|VELO Prevail Revo坐垫,一骑绿动起来吧~
  • python学习之路 - PySpark快速入门
  • 【软考】路由器
  • volatile 关键字
  • 我从obsidian 转入 语雀 了
  • 图像去噪评论:从经典到最先进的方法
  • 在浮躁的时代,保持冷静和沉稳,心怀勇气
  • Windows编程系列:PE文件结构
  • 机器学习数学公式推导之高斯分布
  • (计算机论文)基于SpringBoot和Vue的台球赛事服务网站的设计与实现
  • C++编程语言——基础设施:指针,数组和引用
  • SQLite3 数据类型深入全面讲解
  • linux——进程
  • 算法day17|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
  • SPI通信(软件模拟)
  • -bash: ./log.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录