在Java中将非常大的Blob对象(大约3GB)转换为bytearray

时间:2015-12-08 08:49:00

标签: java blob

我已阅读了多个网站,这些网站展示了将java.sql.Blob对象转换为byte[]并最终保存为文件的示例代码。

e.g。 easiest-way-to-convert-a-blob-into-a-byte-array 要么 image-to-bytearray-to-blob-and-blob-to-bytearray-to-image-conversion-issues-in-j

大部分建议都使用blob.getBytes(pos, length) 即     byte[] blobBytes = blob.getBytes(1, (int) blob.length());

但是,如果blob的大小超过整数的最大值(例如3 GB),则blobBytes对象将被截断,并且创建的文件将格式错误

无论如何都要克服尺寸限制吗?

还是我必须使用blob.getBinaryStream(1, blob.length())来获取InputStream并将其进一步处理为byte []?

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用Apache IOUtils(您需要将其包含在项目中)并将流复制到磁盘。

InputStream blobInputStream = blob.getBinaryStream();
OutputStream fileOutputStream = new FileOutputStream(new File("/path/to/file.out"));
IOUtils.copyLarge(blobInputStream, fileOutputStream);
  

copyLarge(InputStream input,OutputStream output)从a复制字节   大(超过2GB)InputStream到OutputStream。

编辑:您也可以使用blob.getBytes,但是您需要在循环中一次拉出合理数量的字节(例如8192),然后写入FileOutputStream。

答案 1 :(得分:0)

Oracle提供了一种从if(master.arrayContains(sub) > -1){ //Do awesome stuff }

获取inputstram的方法

见:

Reading and Writing BLOB and CLOB Data