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 には既にバッファーの概念があるため、 at allを使用することで実際にパフォーマンスが低下している可能性があります。呼び出しが小さくなり、必要以上のネットワーク呼び出しが行われる可能性があります。BufferedInputStreamread()

BufferedInputStreamブロブのバイナリ ストリームから直接読み取るだけで、完全に削除してみてください。これは単なる考えですが、試してみる価値があります。ああ、書き込むたびに出力ストリームをフラッシュする必要はありません。

(余談ですが、finally ブロックでストリームを閉じる必要があります。そうしないと、例外がスローされた場合にハンドルがリークします。)

于 2010-04-02T07:46:10.560 に答える