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();

前のコード スニペットでは、DB クエリからBlobオブジェクトを取得し、それを読み取ってByteArrayOutputStream docPDFを取得しました。

次に、 ByteArrayOutputStream docPDFByteArrayInputStreamオブジェクトに変換するために、次のようなことを行います。

ByteArrayInputStream currentPdfBAIS = new ByteArrayInputStream(docPDF.toByteArray());

これで、 ByteArrayInputStreamオブジェクトを取得できました。

それはうまくいきますが、それはそれを行うための最良の方法ですか?ByteArrayOutputStream docPdfオブジェクトを経由せずに、 Blobオブジェクトから始まるByteArrayInputStreamオブジェクトを取得できますか? または、以前に提示されたソリューションは正しいものですか?

TNX

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 に答える