我已阅读了多个网站,这些网站展示了将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 []?
答案 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
}
:
见: