`

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();

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

分享到:
评论

相关推荐

    Blob、InputStream、byte 互转

    ### Blob、InputStream、byte 互转 在Java开发过程中,我们经常会遇到数据格式转换的问题,尤其是在处理二进制数据如图片、文件等时。本文将详细介绍如何实现`Blob`、`InputStream`、`byte[]`之间的相互转换,并...

    blob,将byte二进制转成pdf

    标题中的“blob,将byte二进制转成pdf”指的是在IT领域中处理二进制数据(Blob)并将其转换为PDF文档的过程。Blob在计算机科学中通常代表Binary Large Object,用于存储大块非结构化的数据,如图像、音频、视频或者在...

    Java 类型相互转换byte[]类型,Blob类型详细介绍

    在Java编程中,数据存储和传输常常涉及到不同类型的数据转换,特别是在数据库操作中,与二进制大数据相关的类型如`byte[]`(字节数组)和`Blob`(Binary Large Object)之间的转换尤为常见。本篇文章将详细讲解如何...

    【IT十八掌徐培成】Java基础第24天-01.Blob字段操作.zip

    InputStream is = blob.getBinaryStream(); FileOutputStream fos = new FileOutputStream("output_file_path"); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1...

    java将图片写入数据库,并读出来(blob clob)

    byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } fos.close(); is.close(); } ``` 6. **关闭资源** 记得在完成操作...

    在Oracle中存取BLOB对象实现文件的上传和下载.txt

    byte[] b = new byte[blob.getBufferSize()]; int len = 0; while ((len = fin.read(b)) != -1) { outStream.write(b, 0, len); } fin.close(); outStream.flush(); outStream.close(); con.commit(); } ...

    Hiberante读取BLOB数据类型.

    在Java的持久化框架Hibernate中,BLOB(Binary Large Object)数据类型被用来存储大量二进制数据,如图片、音频、视频或者大型文本文件。本文将深入探讨Hibernate如何读取BLOB类型的数据,以及在实际开发中需要注意...

    oracle中读取blob字段.doc

    InputStream inStream = imgBlob.getBinaryStream(); byte[] buf = new byte[10240]; int len; while ((len = inStream.read(buf)) &gt; 0) { outStream.write(buf, 0, len); } inStream.close(); outStream....

    Hibernate读取blob字段

    byte[] bytes = new byte[(int) image.getImageData().length()]; is.read(bytes); FileOutputStream fos = new FileOutputStream("image.jpg"); fos.write(bytes); fos.close(); transaction.commit(); ...

    java对oracle数据库中blob字段的处理

    byte[] fileContent = blobData.getBytes(1, (int)blobData.length()); // 这里可以将fileContent写入文件或其他操作 } rs.close(); stmt.close(); conn.close(); } } ``` #### 2. 写入BLOB字段 向Oracle...

    Hibernate对Blob,Clob的操作

    InputStream is = blob.getBinaryStream(); // 处理输入流,例如写入文件 Clob clob = entity.getTextData(); Reader reader = clob.getCharacterStream(); // 读取字符流,例如转换为字符串 ``` 值得注意的是,...

    使用JDBC4.0操作Oracle中BLOB类型的数据方法

    这段代码从数据库中查询BLOB字段,获取InputStream,然后将数据写入一个新的文件。注意,为了提高性能,这里使用了BufferedInputStream和BufferedOutputStream进行缓冲操作。 在实际应用中,确保正确处理异常并关闭...

    利用Java向Oracle中插入图片&#40;BLOB&#41;文件.doc

    byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1) { os.write(buffer, 0, bytesRead); } // 提交事务 ps.close(); os.close(); is.close(); conn.commit();...

    java中读取ORACLE中BLOB字段存储的图片

    InputStream inStream = blob.getBinaryStream(); try { // 获取图片数据长度 long nLen = blob.length(); int nSize = (int) nLen; data = new byte[nSize]; inStream.read(data); inStream.close(); } ...

    weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB 类型转换解决办法

    byte[] by = new byte[len]; int i; while (-1 != (i = input.read(by, 0, by.length))) { input.read(by, 0, i); } rtn = new String(by); // 使用 getSubString 方法获取 CLOB 的子字符串 rtn = clob....

    JDBC中操作Blob、Clob等对象

    InputStream blobStream = blob.getBinaryStream(); byte[] imageData = IOUtils.toByteArray(blobStream); } ``` 通过以上的示例可以看出,操作Blob和Clob数据实际上与处理普通的字符串或整型数据类似,只需要...

    Hibernate对BLOB CLOB操作

    为了实际读取和写入BLOB和CLOB,你需要从文件系统读取数据,然后将其转换为InputStream或Reader,再使用Hibernate提供的方法。例如,你可以使用FileInputStream读取文件,然后将它转换为BLOB,类似地,使用...

    oracle中的Blob和Clob区别

    InputStream inStream = blob.getBinaryStream(); byte[] data = new byte[inStream.available()]; inStream.read(data); inStream.close(); } inStream.close(); con.commit(); con.close(); ``` #### ...

    Oracle blob字段上传下载

    byte[] b = new byte[blob.getBufferSize()]; int len; while ((len = fin.read(b)) != -1) { outStream.write(b, 0, len); } fin.close(); outStream.flush(); outStream.close(); } rs.close(); st....

    java读取大字段blob类型

    4. **读取BLOB数据**:通过`ResultSet`获取到`BLOB`对象,并将其转换为`InputStream`进行读取。 ```java if (rs.next()) { oracle.sql.BLOB content = (oracle.sql.BLOB) rs.getBlob("content"); ...

Global site tag (gtag.js) - Google Analytics