我們在使用windows系統時發現,復制一個文件的再粘貼的速度大體上是一致的,我們可以猜想這是微軟內部的工作人員設計的一個算法,而這個操作所能實現的最大速度是由什麼影響的呢??
那麼我們可不可以自己設計一個方法來代替windows自帶的復制粘貼方法來達到更快的傳輸速度呢??
下面的一段代碼就以緩沖的形勢來實現了文件的copy工作:
publicvoid copybyte(String srcFile,String destFile)throws IOException{
//創建輸入流
InputStream ins=new FileInputStream(srcFile);
//創建輸出流
OutputStream outs=new FileOutputStream(destFile);
//創建緩沖區,一次讀取16K的文件
byte[] buf=newbyte[16384];
int i=ins.read(buf);
System.out.println("開始復制....");
//獲取當前時間
System.out.println(System.currentTimeMillis());
while(i!=-1){
outs.write(buf);
i=ins.read(buf);
}
System.out.println(System.currentTimeMillis());
System.out.println("復制結束....");
//關閉流
ins.close();
outs.close();
}
首先,我使用了一個860多M的程序進行測試,發現在windows中復制粘貼的速度大體上是在40M每秒左右,復制一個這樣的文件大約需要20多秒的時間,而使用上述方法進行復制的時候,經過反復的測試,發現時間基本上在23秒左右的樣子,而且當數值超過16K之後,速度就不會再增大了,而調整為8K的時候,時間大概在29秒左右,其實這也就解釋了一個現象,算法本身並不能超過電腦硬盤與CPU之間的交互速度,硬件依舊是瓶頸,但是我們能不能用一塊外置的更快的硬盤來實現提升原本硬盤的速度呢??
此外,看過BufferredInputStream源碼的都知道,裡面有這樣的一個屬性:
privatestaticintdefaultBufferSize = 8192;
這就說明,緩沖輸入流定義的緩沖數組的大小是8K,並沒有達到計算機的極限速度,計算機還有更多的秘密等待著我們去發現呢
查看本欄目