我有一个文件,它由一个序列化的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),代码需要很长时间。我怎样才能加快代码速度?我使用错误的课程吗?
问候。
答案 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
在这里,您已经记录了具有缓冲区大小的构造函数的版本。也许你可以使用一个大的缓冲区(以你的内存使用为代价,当然,也准备好增加你的堆大小)