使用BufferedOutputStream创建大文件需要很长时间

时间:2013-12-20 10:37:36

标签: java file bufferedinputstream

我有一个文件,它由一个序列化的String对象组成,该对象写入文件的开头,后跟我试图提取的文件的原始字节。

这是我的代码:

FileInputStream fileInputStream = new FileInputStream("C:\Test.tst");
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
String string = (String) objectInputStream.readObject();
FileOutputStream fileOutputStream = new FileOutputStream("C:\ExtractedTest.tst");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
while(fileInputStream.available())
{
  int i = fileInputStream.read();
  bufferedOutputStream.write(i);
}
bufferedOutputStream.close();
fileOutputStream.close();

对于大型文件(例如1.5 GB),代码需要很长时间。我怎样才能加快代码速度?我使用错误的课程吗?

问候。

2 个答案:

答案 0 :(得分:1)

首先,我猜你不需要:

ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
String string = (String) objectInputStream.readObject();

...你的循环看起来应该更像:

final byte[] temp = new byte[1000];
while (fileInputStream.available() > 0){
 int i = fileInputStream.read(temp);
 bufferedOutputStream.write(temp, 0, i);
}

答案 1 :(得分:0)

您可以尝试通过更改缓冲区大小来微调您的应用程序。

http://docs.oracle.com/javase/7/docs/api/java/io/BufferedOutputStream.html

在这里,您已经记录了具有缓冲区大小的构造函数的版本。也许你可以使用一个大的缓冲区(以你的内存使用为代价,当然,也准备好增加你的堆大小)

Increase heap size in Java