加速从 InputStream 读取和使用 FileOutputStream 写入
Speeding up reading from InputStream and writing with FileOutputStream
我正在从数据库的列中读取一些 blob,并使用 FileOutputStream
将它们保存到文件中。
这是我的代码:
InputStream binaryFile = rs_ivol.getBinaryStream("BLOB_COLUMN_FROM_BY_DB");
FileOutputStream outputFile = new FileOutputStream(myoutpath);
int aux = 0;
while ((aux = binaryFile.read()) != -1)
{
outputFile.write(aux);
}
问题是这非常慢。我需要转换超过 58225 个项目,最多可能需要 24 小时。
有人能告诉我如何使 read-from-InputStream → write-to-FileOutputStream 更快吗?
提前致谢。
使用缓冲区读写。
InputStream binaryFile = rs_ivol.getBinaryStream("BLOB_COLUMN_FROM_BY_DB");
FileOutputStream outputFile = new FileOutputStream(myoutpath);
int aux = 0;
byte[] buffer = new byte[1024];
while ((aux = binaryFile.read(buffer)) > 0)
{
outputFile.write(buffer, 0, aux);
}
编辑:
请参阅 DwB 的回答以了解滚动您自己的缓冲区的替代方法...
编辑:
另外@Nicolas Filotto 也有更好的建议...
假设您有 Java 7 或更高 并且您不想重新发明轮子,请考虑使用 Files.copy(InputStream in, Path target, CopyOption... options)
作为下一步:
try (InputStream binaryFile = rs_ivol.getBinaryStream("BLOB_COLUMN_FROM_BY_DB")) {
Files.copy(binaryFile, Paths.get(myoutpath), StandardCopyOption.REPLACE_EXISTING);
}
我正在从数据库的列中读取一些 blob,并使用 FileOutputStream
将它们保存到文件中。
这是我的代码:
InputStream binaryFile = rs_ivol.getBinaryStream("BLOB_COLUMN_FROM_BY_DB");
FileOutputStream outputFile = new FileOutputStream(myoutpath);
int aux = 0;
while ((aux = binaryFile.read()) != -1)
{
outputFile.write(aux);
}
问题是这非常慢。我需要转换超过 58225 个项目,最多可能需要 24 小时。
有人能告诉我如何使 read-from-InputStream → write-to-FileOutputStream 更快吗?
提前致谢。
使用缓冲区读写。
InputStream binaryFile = rs_ivol.getBinaryStream("BLOB_COLUMN_FROM_BY_DB");
FileOutputStream outputFile = new FileOutputStream(myoutpath);
int aux = 0;
byte[] buffer = new byte[1024];
while ((aux = binaryFile.read(buffer)) > 0)
{
outputFile.write(buffer, 0, aux);
}
编辑: 请参阅 DwB 的回答以了解滚动您自己的缓冲区的替代方法...
编辑: 另外@Nicolas Filotto 也有更好的建议...
假设您有 Java 7 或更高 并且您不想重新发明轮子,请考虑使用 Files.copy(InputStream in, Path target, CopyOption... options)
作为下一步:
try (InputStream binaryFile = rs_ivol.getBinaryStream("BLOB_COLUMN_FROM_BY_DB")) {
Files.copy(binaryFile, Paths.get(myoutpath), StandardCopyOption.REPLACE_EXISTING);
}