Blob、InputStream、byte 互转

2010年07月22日 星期四 15:52
Blob、InputStream、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();

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

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sukyle/archive/2010/05/29/5632713.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中 Blob 和 Clob 是 JDBC API 中的两种数据类型,Blob 表示二进制数据,Clob 表示文本数据。InputStreambyte[] 则是 Java 中常用的二进制数据处理方式。 下面是 Blobbyte[] 之间的相互转换: 1. Blobbyte[] ```java Blob blob = resultSet.getBlob("blob_column"); byte[] data = blob.getBytes(1, (int) blob.length()); ``` 2. byte[] 转 Blob ```java byte[] data = ...; Blob blob = connection.createBlob(); blob.setBytes(1, data); ``` 下面是 BlobInputStream 之间的相互转换: 1. BlobInputStream ```java Blob blob = resultSet.getBlob("blob_column"); InputStream inputStream = blob.getBinaryStream(); ``` 2. InputStreamBlob ```java InputStream inputStream = ...; Blob blob = connection.createBlob(); OutputStream outputStream = blob.setBinaryStream(1); byte[] buffer = new byte[4096]; int bytesRead = -1; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } ``` 下面是 Blob 和 Clob 之间的相互转换: 1. Blob 转 Clob ```java Blob blob = resultSet.getBlob("blob_column"); Clob clob = connection.createClob(); Writer writer = clob.setCharacterStream(1); InputStream inputStream = blob.getBinaryStream(); byte[] buffer = new byte[4096]; int bytesRead = -1; while ((bytesRead = inputStream.read(buffer)) != -1) { writer.write(new String(buffer, 0, bytesRead, "UTF-8")); } ``` 2. Clob 转 Blob ```java Clob clob = resultSet.getClob("clob_column"); Blob blob = connection.createBlob(); OutputStream outputStream = blob.setBinaryStream(1); Reader reader = clob.getCharacterStream(); char[] buffer = new char[4096]; int charsRead = -1; while ((charsRead = reader.read(buffer)) != -1) { outputStream.write(new String(buffer, 0, charsRead).getBytes("UTF-8")); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值