У меня есть некоторые сомнения в том, как преобразовать объект Blob (взятый из базы данных и представляющий собой PDF) в объект ByteArrayInputStream.Как правильно преобразовать объект Blob в объект 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 объект из запроса DB, и я прочитал его получения ByteArrayOutputStream docPDF.
Тогда я сделать что-то вроде этого, чтобы преобразовать мой ByteArrayOutputStream docPDF в ByteArrayInputStream объекта:
ByteArrayInputStream currentPdfBAIS = new ByteArrayInputStream(docPDF.toByteArray());
Таким образом, я получил мой ByteArrayInputStream объект.
Он отлично работает, но это лучший способ сделать это? Могу ли я получить ByteArrayInputStream объект, начинающийся с Blob объект без прохождения через ByteArrayOutputStream docPdf объект? Или предыдущее представленное решение является правильным?
Tnx
Почему вы хотите ByteArrayInputStream? Вы хотите сохранить InputStream за транзакцией, в которой вы создаете blob? Если нет, просто используйте blob.getBinaryStream(). –
Ответ на этот вопрос зависит от конечного назначения содержимого PDF. Обычно вы никогда не загрузите его в массив байтов, потому что он не будет масштабироваться очень хорошо. –
@AdrianLeonhard Поскольку я использую iText для создания PDF (начиная с содержимого Blob в моей БД), а iText использует ByteArrayOutputStream для создания PDF-файла –