BLOB フィールドからメモリ マップ ファイルを書き込みたい。フィールドには、圧縮されていない gzip または bzip2 圧縮データを含めることができます。現在、次のコードを使用して blob を読み取り、FileOutputStream を使用してファイルに書き込みましたが、より高速にしたいと考えています。
private static void writeBLOB(
Statement myStatement,
String fileName
) throws SQLException, IOException {
// step 1: initialize the LOB column to set the LOB locator
myStatement.executeUpdate(
"INSERT INTO EDR_RRP_INFO(file_name, DEC_EDR_INFO) " +
"VALUES ('" + fileName + "', EMPTY_BLOB())"
);
// step 2: retrieve the row containing the LOB locator
ResultSet blobResultSet = myStatement.executeQuery(
"SELECT DEC_EDR_INFO " +
"FROM EDR_RRP_INFO " +
"WHERE file_name = '" + fileName + "' " +
"FOR UPDATE"
);
blobResultSet.next();
// step 3: create a LOB object and read the LOB locator
BLOB myBlob =
((OracleResultSet) blobResultSet).getBLOB("DEC_EDR_INFO");
// step 4: get the buffer size of the LOB from the LOB object
int bufferSize = myBlob.getBufferSize();
// step 5: create a buffer to hold a block of data from the file
byte [] byteBuffer = new byte[bufferSize];
// step 6: create a file object
File myFile = new File(fileName);
// step 7: create a file input stream object to read
// the file contents
FileInputStream myFileInputStream = new FileInputStream(myFile);
// step 8: create an input stream object and call the appropriate
// LOB object output stream function
OutputStream myOutputStream = 3myBlob.getBinaryOutputStream();
// step 9: while the end of the file has not been reached,
// read a block from the file into the buffer, and write the
// buffer contents to the LOB object via the output stream
int bytesRead;
while ((bytesRead = myFileInputStream.read(byteBuffer)) != -1) {
// write the buffer contents to the output stream
// using the write() method
myOutputStream.write(byteBuffer);
} // end of while
// step 10: close the stream objects
myFileInputStream.close();
myOutputStream.close();
System.out.println("Wrote content from file " +
fileName + " to BLOB");
} // end of writeBLOB()
誰でもそれについて私を助けることができますか? さまざまな方法で試しましたが失敗しました。