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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章