java.sql.Blob、byte[]、InputStream之间的相互转换

在我们的程序开发当中,经常会用到java.sql.Blob、byte[]、InputStream之间的相互转换,但在JDK的API当中,又没有直接给我们提供可用的API,下面的程序片段主要就是实现它们之间互换的util.
一、byte[]=>Blob
我们可以通过Hibernate提供的表态方法来实现如:
org.hibernate.Hibernate.Hibernate.createBlob(new byte[1024]);
二、Blob=>byte[] 目前没有找到好一点的API提供,所以只能自已来实现。
示例如下:
Java代码 
/**
* 把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[]
Java代码 
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();
以上片段可作为读者参考。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sukyle/archive/2010/05/29/5632713.aspx

猜你喜欢

转载自javalusir.iteye.com/blog/1836855