Как уже упоминалось в моем комментарии, вы не должны использовать JAI или ImageIO для копирования файлов, они не очень хороши в этом. :-)
Вместо этого, это намного быстрее и более совместимо только для копирования содержимого InputStream
прямо на диск (то есть FileOutputStream
).
Изменение кода по линии моего комментария, вы получите:
OraclePreparedStatement pst =
(OraclePreparedStatement)con.prepareStatement("select chq_tif_img from
mstr where id = 52");
ResultSet rs = pst.executeQuery();
if(rs.next())
{
bfile = ((OracleResultSet)rs).getBFILE ("chq_tif_img ");
bfile.openFile();
// Skipping debug output for brevity
try (InputStream inputStream = bfile.getBinaryStream();
OutputStream os_omg = new FileOutputStream("anand.tiff")) {
FileUtils.copy(inputStream, os_omg);
}
finally {
bfile.closeFile(); // Make sure you always close the file when done
}
}
FileUtils.copy
могут быть реализованы в виде:
public void copy(final InputStream in, final OutputStream out) {
byte[] buffer = new byte[1024];
int count;
while ((count = in.read(buffer)) != -1) {
out.write(buffer, 0, count);
}
// Flush out stream, to write any remaining buffered data
out.flush();
}
Не используйте Jai или 'ImageIO' для копирования файлов, они не очень хороши в этом. :-) Просто скопируйте содержимое 'inputStream' прямо на диск. См., Например, [этот ответ] (http://stackoverflow.com/a/29005856/1428606) о том, как скопировать байт файла по байту. – haraldK