欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Clob,Blob,InputStream,byte 互转

程序员文章站 2022-04-23 21:34:27
...
一、byte[]=>Blob

我们可以通过Hibernate提供的表态方法来实现如:
org.hibernate.Hibernate.Hibernate.createBlob(new byte[1024]);


二、Blob=>byte[]
/**
* 把Blob类型转换为byte数组类型
* @param blob
* <a href="http://my.oschina.net/u/556800" target="_blank" rel="nofollow">@return</a> 
*/
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
InputStream is = new ByteArrayInputStream(new byte[1024]);


五、InputStream => Blob
可通过Hibernate提供的API:

Hibernate.createBlob(new FileInputStream(" 可以为图片/文件等路径 "));


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


七、Clob转InputStream
InputStream fileOs=null;
Clob clob= res.getClob("XXXX");
int i=0;
fileOs = clob.getAsciiStream();
int len = (int)clob.length();
byte by[] = new byte[len];
try {
    while(-1 != (i = fileOs.read(by, 0, by.length))){
         fileOs.read(by, 0, i);
    }
} catch (IOException e) {
     e.printStackTrace();
}


以上均为转载:http://my.oschina.net/zimingforever/blog/81691