首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将java.io.InputStream转换为java.sql.Blob

如何将java.io.InputStream转换为java.sql.Blob
EN

Stack Overflow用户
提问于 2015-01-14 09:07:40
回答 2查看 19.8K关注 0票数 2

如何使用纯Java将java.io.InputStream转换为java.sql.Blob

为了响应tbodt的建议,我通过eclipse调试器运行了以下命令。调试器显示myinputstream包含内容,但blob在代码末尾仍为null。我需要做些什么来解决这个问题?

代码语言:javascript
复制
byte[] contents;
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count;
while ((count = myinputstream.read(buffer)) != -1){output.write(buffer, 0, count);}//debugger says myinputstream has blksize 16384, buffcount 12742, and max 127394 here
contents = output.toByteArray();
Blob blob = null;
try {blob = new SerialBlob(contents);} 
catch (SerialException e) {e.printStackTrace();}
catch (SQLException e) {e.printStackTrace();}

someObject.setSomeBlobProperty(blob);//debugger says blob is null here

我还通过调试器运行了IOUtils方法,但得到了完全相同的结果,其中包含一个null blob,但填充了一个myinputstream。我该如何解决这个问题呢?

代码语言:javascript
复制
Blob blob = null;
try {
    blob = new SerialBlob(IOUtils.toByteArray(myinputstream));//debugger says myinputstream has contents here.
    someObject.setSomeBlobProperty(blob);//debugger says blob is null here
} 
catch (SerialException e) {e.printStackTrace();}
catch (SQLException e) {e.printStackTrace();}

在这两种情况下,调试器都表示myinputstream在指定的位置具有blksize 16384、buffcount 12742和max 127394,尽管blob仍保留null。在运行此代码后,我还检查了底层MySQL数据库,并确认blob字段为空。

然后,我通过Eclipse调试器运行以下命令,结果显示,在尝试填充名为contentbyte[]之后,它仍然为空。因此,生成的blob是空的,而inputstream确实继续具有如上所示的相同内容值:

代码语言:javascript
复制
Blob blob = null;
byte[] content = IOUtils.toByteArray(myinputstream);
try {
    blob = new SerialBlob(content);//debugger says content is empty here
    someObject.setSomeBlobProperty(blob);//debugger says blob is empty here.
}//debugger says myinputstream has the same values as in edit#1
catch (SerialException e) {e.printStackTrace();}
catch (SQLException e) {e.printStackTrace();}
EN

回答 2

Stack Overflow用户

发布于 2015-01-14 09:16:45

简单的方法:

代码语言:javascript
复制
contents = IOUtils.toByteArray(in);

但是,您需要Apache Commons IO,这可能很难添加。如果你不想使用它,或者不能使用它,这里有一种你自己做的方法;

代码语言:javascript
复制
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count;
while ((count = input.read(buffer)) != -1)
    output.write(buffer, 0, count);
contents = output.toByteArray();
票数 -1
EN

Stack Overflow用户

发布于 2017-05-04 23:31:24

您可以使用相同的方法:

代码语言:javascript
复制
Blob xmlForSign=null;
xmlForSign.getBinaryStream();

此方法getBinaryStream()返回输入文件流。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27934293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档