加速从InputStream读取并使用FileOutputStream进行编写

时间:2016-11-11 13:57:00

标签: java performance java-io

我正在从数据库的列中读取一些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 写入FileOutputStream

提前致谢。

2 个答案:

答案 0 :(得分:2)

使用缓冲区进行读写。

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也提出了更好的建议......

答案 1 :(得分:1)

假设你有 Java 7或更高版本并且你不想重新发明轮子,请考虑使用Files.copy(InputStream in, Path target, CopyOption... options)作为下一个:

public JButton clearButton(){ // clearButton method
    JButton clearButton = new JButton("CLEAR"); // new button of type JButton
    clearButton.setPreferredSize(new Dimension(200,30)); // dimension of the button
    clearButton.setLocation(400,450);
    return clearButton; // return reference to the JButton object
}