我对如何将 Blob 对象(从数据库中获取并表示PDF)转换为 ByteArrayInputStream 对象产生了疑问。
所以我知道我可以这样做:
ByteArrayOutputStream docPDF = null;
InputStream blobinstream = null;
Blob blob = rset.getBlob("PDF"); // I obtain it from a result set DB query
if(blob!=null) {
blobinstream = blob.getBinaryStream();
int chunk = 1024;
byte[] buffer = new byte[chunk];
int length = -1;
docPDF = new ByteArrayOutputStream();
while ((length = blobinstream.read(buffer)) != -1) {
docPDF.write(buffer, 0, length);
}
docPDF.flush();
因此,在之前的代码段中,我从数据库查询中获取了 Blob 对象,并在读取它时获取 ByteArrayOutputStream docPDF 。
然后我做了类似的事情将 ByteArrayOutputStream docPDF 转换为 ByteArrayInputStream 对象:
ByteArrayInputStream currentPdfBAIS = new ByteArrayInputStream(docPDF.toByteArray());
所以我已经获得了 ByteArrayInputStream 对象。
它工作正常,但这是最好的方法吗?我是否可以从 Blob 对象获取 ByteArrayInputStream 对象,而无需通过 ByteArrayOutputStream docPdf 对象?或者之前提出的解决方案是正确的?
TNX
答案 0 :(得分:-2)
当您获得输入流时,您需要将其写入某些内容,因此您的上述示例是可以的。请记住,您正在将整个文件读入内存。如果这是理想的结果,那就没关系了。
为了简化我的代码,我使用了Apache的IOUtils:
bos = new ByteArrayOutputStream();
IOUtils.copy(rs.getBlob(1).getBinaryStream(), bos);
bos.flush();
byte[] contentData = bos.toByteArray();