0

我正在从 Oracle 数据库中读取 BLOB 列,然后将其写入文件,如下所示:

    public static int execute(String filename, BLOB blob)
  {

    int success = 1;

    try
    {
      File              blobFile   = new File(filename);
      FileOutputStream  outStream  = new FileOutputStream(blobFile);
      BufferedInputStream inStream   = new BufferedInputStream(blob.getBinaryStream());

      int     length  = -1;
      int     size    = blob.getBufferSize();
      byte[]  buffer  = new byte[size];

      while ((length = inStream.read(buffer)) != -1)
      {
        outStream.write(buffer, 0, length);
        outStream.flush();
      }

      inStream.close();
      outStream.close();
    }
    catch (Exception e)
    {
      e.printStackTrace();
      System.out.println("ERROR(img_exportBlob) Unable to export:"+filename);
      success = 0;
    }
}

文件大小约为 3MB,读取缓冲区需要 40-50 秒。它实际上是一个 3D 图像数据。那么,有什么办法可以减少这个时间吗?

4

1 回答 1

3

鉴于 blob 已经具有缓冲区的概念,因此您实际上可能会通过使用根本损害性能BufferedInputStream- 它可能会进行较小的read()调用,进行不必要的网络调用。

尝试完全摆脱,BufferedInputStream直接从 blob 的二进制流中读取。这只是一个想法,但值得一试。哦,您不需要在每次写入时都刷新输出流。

(顺便说一句,您应该在 finally 块中关闭流 - 否则如果有任何东西引发异常,您将泄漏句柄。)

于 2010-04-02T07:46:10.560 回答