gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:23:39 25 4
gpt4 key购买 nike

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

最佳答案

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

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

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

关于java - 如何正确地将Blob对象转换为ByteArrayInputStream对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28672273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com