当前位置: 代码迷 >> J2SE >> blob读取,字节数组读取报错
  详细解决方案

blob读取,字节数组读取报错

热度:200   发布时间:2016-04-23 20:30:31.0
blob读取,字节数组读取出错
本帖最后由 magi1201 于 2014-07-26 11:34:28 编辑
oracle数据库中存储了一个image字段,字段类型为blob,存储了一个858k的图片进去
通过 sql读取blob时,如果按照单字节读取,图片可以完整读出
如果 按照字节数组读取,就一直出错
代码如下,当前代码为单字节读取

String blobSql = "select * from emp where empno = ?";
PreparedStatement ps = conn.prepareStatement(blobSql);
ps.setInt(1, 7369);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
Blob image = rs.getBlob("image");
DataOutputStream dos = 
new DataOutputStream(new FileOutputStream(7369 + "_image.jpeg"));
InputStream fis = image.getBinaryStream();
int out;
byte[] outByte = new byte [100];  // 问题代码段
while ((out = fis.read()) != -1) { // 问题代码段
dos.write(out);
}
System.out.println("write file over");
fis.close();
dos.flush();
dos.close();
}


如果换为
 

byte[] outByte = new byte [100];  
while ((out = fis.read(outByte)) != -1) {
dos.write(out);
}

则 图片大小为
 
换为  new byte [10]; 则图片大小为
   
换为  new byte [5]; 则图片大小为
 

字节数组越小,读到的内容越多。

求教,这个是什么原因导致的,请不吝赐教,谢谢。
------解决方案--------------------
为什么读取流的把文件读进数组,而写入流把int out写进输出流,不是应该把 outByte数组写进去么?
难道我看错了么?
  相关解决方案