如何正确地将Blob对象转换为ByteArrayInputStream对象?

时间:2015-02-23 11:04:41

标签: java java-ee bytearray bytearrayoutputstream bytearrayinputstream

我对如何将 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

1 个答案:

答案 0 :(得分:-2)

当您获得输入流时,您需要将其写入某些内容,因此您的上述示例是可以的。请记住,您正在将整个文件读入内存。如果这是理想的结果,那就没关系了。

为了简化我的代码,我使用了Apache的IOUtils:

bos = new ByteArrayOutputStream();
IOUtils.copy(rs.getBlob(1).getBinaryStream(), bos);
bos.flush();
byte[] contentData = bos.toByteArray();