首页 > 其他分享 >Blob、InputStream、byte 互转

Blob、InputStream、byte 互转

时间:2023-09-21 12:39:11浏览次数:31  
标签:return read InputStream Blob 互转 new byte


在我们的程序开发当中,经常会用到java.sql.Blob、byte[]、InputStream之间的相互转换,但在JDK的API当中,又没有直接给我们提供可用的API,下面的程序片段主要就是实现它们之间互换的util.

一、byte[]=>Blob

我们可以通过Hibernate提供的表态方法来实现如:

org.hibernate.Hibernate.Hibernate.createBlob(new byte[1024]);

二、Blob=>byte[] 目前没有找到好一点的API提供,所以只能自已来实现。

示例如下: 

/**
* 把Blob类型转换为byte数组类型
* @param blob
* @return
*/
private byte[] blobToBytes(Blob blob) {

BufferedInputStream is = null;

try {
is = new BufferedInputStream(blob.getBinaryStream());
byte[] bytes = new byte[(int) blob.length()];
int len = bytes.length;
int offset = 0;
int read = 0;

while (offset < len && (read = is.read(bytes, offset, len - offset)) >= 0) {
offset += read;
}
return bytes;
} catch (Exception e) {
return null;
} finally {
try {
is.close();
is = null;
} catch (IOException e) {
return null;
}
}
}

  三、InputStream=>byte[]

private byte[] InputStreamToByte(InputStream is) throws IOException {  

ByteArrayOutputStream bytestream = new ByteArrayOutputStream();  
int ch;  
while ((ch = is.read()) != -1) {  
bytestream.write(ch);  
}  
byte imgdata[] = bytestream.toByteArray();  
bytestream.close();  

return imgdata;  
}

 四、byte[] => InputStream byte[]到inputStream之间的转换很简单:

InputStream is = new ByteArrayInputStream(new byte[1024]);

 五、InputStream => Blob

 可通过Hibernate提供的API:Hibernate.createBlob(new FileInputStream(" 可以为图片/文件等路径 "));

六、Blob => InputStream

Blog转流,可通过提供的API直接调用:new Blob().getBinaryStream();

 以上片段可作为读者参考。


标签:return,read,InputStream,Blob,互转,new,byte
From: https://blog.51cto.com/u_16255870/7552758

相关文章

  • ELT in ByteHouse 实践与展望
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群谈到数据仓库,一定离不开使用Extract-Transform-Load(ETL)或Extract-Load-Transform(ELT)。将来源不同、格式各异的数据提取到数据仓库中,并进行处理加工。传统的数据转换过程一般采用Ext......
  • gradle/maven/eclipse工程相互转化
    。gradle/maven/eclipse工程相互转化:前提安装好相应的工具和插件。1、Maven->eclipsemvneclipse:eclipse 2、eclipse->maven安装好maven插件后,在eclipse工程右键项目:转换为maven工程即可。 3、gradle->eclipse编辑build.gradle文件,在文件最前面增加一行:a......
  • 直击火山引擎V-Tech峰会!仅需简单登录,即可极速体验数据引擎ByteHouse
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 9月19日,火山引擎“数据飞轮·V-Tech数据驱动科技峰会”在上海举办。会上重磅发布数智平台VeDI应用大模型(LargeLanguageModels)能力,并进一步解读了数据飞轮的行业应用与实践。作为核......
  • java中string与byte[]的转换
    1.string转byte[]byte[]midbytes=isoString.getBytes("UTF8");//为UTF8编码byte[]isoret=srt2.getBytes("ISO-8859-1");ISO-8859-1编码ISO-8859-1为单字节的编码2.byte[]转stringStringisoString=newString(byte......
  • 【Azure 存储服务】访问Azure Blob File遇见400-Condition Headers not support错误的
    问题描述在微软云存储账号的服务中,存储一些静态图片,然后通过AppService访问,但是遇见了400-conditionheadersnotsupport错误。在单独通过浏览器访问FileShare中的文件,发现第一次可以请求成功,但是第二次刷新后就遇见400错误,第三次刷新的时候又访问成功,如此循环下去。错误消......
  • 【Azure 存储服务】访问Azure Blob File遇见400-Condition Headers not support错误的
    问题描述在微软云存储账号的服务中,存储一些静态图片,然后通过AppService访问,但是遇见了400-conditionheadersnotsupport错误。在单独通过浏览器访问FileShare中的文件,发现第一次可以请求成功,但是第二次刷新后就遇见400错误,第三次刷新的时候又访问成功,如此循环下去。错......
  • KingbaseES数据库导入数据invalid byte sequence for encoding
    一、适用版本:KingbaseES数据库所有版本。二、问题现象:使用备份的数据进行还原,还原过程中发生异常。日志信息:sys_restore:connectingtodatabaseforrestoresys_restore:creatingTABLE"public.table_name"sys_restore:creatingCOMMENT"public.COLUMNtable_name.co......
  • 如何快速从 ETL 到 ELT?火山引擎 ByteHouse 做了这三件事
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群前言当涉及到企业分析场景时,所使用的数据通常源自多样的业务数据,这些数据系统大多采用以行为主的存储结构,比如支付交易记录、用户购买行为、传感器报警等。在数仓及分析领域,海量数据则主要采按列......
  • 如何快速从 ETL 到 ELT?火山引擎 ByteHouse 做了这三件事
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 前言当涉及到企业分析场景时,所使用的数据通常源自多样的业务数据,这些数据系统大多采用以行为主的存储结构,比如支付交易记录、用户购买行为、传感器报警等。在数仓及分析领域,海量数据则主......
  • python 全角半角字符、字符串互转
    defis_chinese(uchar):"""判断一个unicode是否是汉字"""ifuchar>=u'\u4e00'anduchar<=u'\u9fa5':returnTrueelse:returnFalsedefis_number(uchar):"""......