将java.io.inputstream转换为java.sql.blob

时间:2015-01-14 01:07:40

标签: java

如何使用纯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

2 个答案:

答案 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。