如何使用纯Java将java.io.InputStream
转换为java.sql.Blob
?
为了响应tbodt的建议,我通过eclipse调试器运行了以下命令。调试器显示myinputstream
包含内容,但blob
在代码末尾仍为null
。我需要做些什么来解决这个问题?
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
。我该如何解决这个问题呢?
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调试器运行以下命令,结果显示,在尝试填充名为content
的byte[]
之后,它仍然为空。因此,生成的blob
是空的,而inputstream
确实继续具有如上所示的相同内容值:
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();}
发布于 2015-01-14 09:16:45
简单的方法:
contents = IOUtils.toByteArray(in);
但是,您需要Apache Commons IO,这可能很难添加。如果你不想使用它,或者不能使用它,这里有一种你自己做的方法;
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();
发布于 2017-05-04 23:31:24
您可以使用相同的方法:
Blob xmlForSign=null;
xmlForSign.getBinaryStream();
此方法getBinaryStream()返回输入文件流。
https://stackoverflow.com/questions/27934293
复制相似问题