如何使用纯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
{ {1}}。运行此代码后,我还检查了基础null
数据库,并确认blob字段为空。
编辑#2
然后我通过eclipse调试器运行了以下内容,该调试器显示在尝试填充它之后,mysql
调用byte[]
仍为空。因此,生成的content
为空,而blob
确实继续具有与上面编辑#1中所示相同的内容值:
inputstream
答案 0 :(得分:0)
简单方法:
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();
答案 1 :(得分:0)
你可以使用相同的:
Blob xmlForSign=null;
xmlForSign.getBinaryStream();
此方法getBinaryStream()返回一个Inputfilestream。