Java 类型相互转换byte[]类型,Blob类型详细介绍
在我们的程序开发当中,经常会用到java.sql.Blob、byte[]、InputStream之间的相互转换,但在JDK的API当中,又没有直接给我们提供可用的API,下面的程序片段主要就是实现它们之间互换的util.
一、byte[]=>Blob
我们可以通过Hibernate提供的表态方法来实现如:
org.hibernate.Hibernate.Hibernate.createBlob(newbyte[1024]);
二、Blob=>byte[]
目前没有找到好一点的API提供,所以只能自已来实现。示例如下:
/**
*把Blob类型转换为byte数组类型
*@paramblob
*@return
*/
privatebyte[]blobToBytes(Blobblob){
BufferedInputStreamis=null;
try{
is=newBufferedInputStream(blob.getBinaryStream());
byte[]bytes=newbyte[(int)blob.length()];
intlen=bytes.length;
intoffset=0;
intread=0;
while(offset<len&&(read=is.read(bytes,offset,len-offset))>=0){
offset+=read;
}
returnbytes;
}catch(Exceptione){
returnnull;
}finally{
try{
is.close();
is=null;
}catch(IOExceptione){
returnnull;
}
}
}
三、InputStream=>byte[]
privatebyte[]InputStreamToByte(InputStreamis)throwsIOException{
ByteArrayOutputStreambytestream=newByteArrayOutputStream();
intch;
while((ch=is.read())!=-1){
bytestream.write(ch);
}
byteimgdata[]=bytestream.toByteArray();
bytestream.close();
returnimgdata;
}
四、byte[]=>InputStream
byte[]到inputStream之间的转换很简单:InputStreamis=newByteArrayInputStream(newbyte[1024]);
五、InputStream=>Blob
可通过Hibernate提供的API:Hibernate.createBlob(newFileInputStream("可以为图片/文件等路径"));
六、Blob=>InputStream
Blog转流,可通过提供的API直接调用:newBlob().getBinaryStream();
以上片段可作为读者参考。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!