1

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

它工作正常,但这是最好的方法吗?我可以在不通过ByteArrayOutputStream docPdf对象的情况下从Blob对象获取ByteArrayInputStream对象吗?还是之前提出的解决方案是正确的?

肿瘤坏死因子

4

1 回答 1

-2

当您获得输入流时,您需要将其写入某些内容,因此您上面的示例是可以的。请记住,您正在将整个文件读入内存。如果这是期望的结果,那很好。

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

bos = new ByteArrayOutputStream();
IOUtils.copy(rs.getBlob(1).getBinaryStream(), bos);
bos.flush();
byte[] contentData = bos.toByteArray();
于 2015-02-23T11:47:38.530 回答