效率測試
測試檔案mp4檔案,大小為9,223,457 位元組
1、fileinputstream和fileoutputstream
使用read()和write() 方法進行讀寫:
private
static
void
method1(string srcpath, string destpath) throws ioexception
fos.close();
fis.close();
}
耗時:114850毫秒
使用read(byte b)和write(byte b, int off, int len)方法進行讀寫:
private
static
void
method2(string srcpath, string destpath) throws ioexception
fos.close();
fis.close();
}
耗時:79毫秒
分析:(如若有誤,望指正)
1、我們的檔案都是存在磁碟上的,但是cpu是不會直接操作磁碟的資料,需要先將資料讀到記憶體,然後cpu在記憶體中的操作這部分資料。
2、將資料從磁碟複製到記憶體的過程中,cpu不會閒著,會去處理其他的事情。
3、當執行fileinputstream的read()方法時,cpu會放下正在處理的事情,並對正在處理的事情做好記錄後,去通知io系統讀取乙個位元組到記憶體,然後接著回去處理之前的事情,然後io系統就將這乙個位元組的資料讀取到記憶體。所以每讀取乙個位元組,cpu就會經過一番折騰,才會通知io系統,進行io操作,當檔案特別大的時候,就會消耗很多的時間。假設需要讀取1kb的檔案,cpu就需要通知io系統1024次。
4、當執行fileinputstream的read(byte b)方法是,cpu經過一番的折騰,通知io系統,讀取陣列長度的位元組到記憶體,然後就去幹自己的事情了。假設需要讀取1kb的檔案,我們定義乙個位元組陣列大小為512,此時cpu只需要通知io系統兩次就夠了。
5、write方法的原理差不多
6、當檔案越大時間差越明顯
2、bufferedinputstream和bufferedoutputstream
使用read()和write() 方法進行讀寫:
private
static
void
method3(string srcpath, string destpath) throws ioexception
bos.close();
bis.close();
}
耗時:269毫秒
使用read(byte b)和write(byte b, int off, int len)方法進行讀寫:
private
static
void
method4(string srcpath, string destpath) throws ioexception
bos.close();
bis.close();
}
耗時:19毫秒
分析:(分析的不好,做個簡單的記錄)
1、bufferedinputstream預設在記憶體中開闢乙個8k的快取,也可以通過構造方法設定快取的大小,以預設的8k為例。
2、當執行bufferedinputstream的read()方法時,read()方法雖然是乙個位元組乙個位元組的返回資料,但是如果快取區為空,cpu先讓io系統把快取區填滿,然後才開始返回資料。
3、當執行bufferedinputstream的read(byte b)方法時也一樣,先把快取填滿。
3、當緩衝區一樣大小時
private
static
void
method2(string srcpath, string destpath) throws ioexception
fos.close();
fis.close();
}
共耗時:38毫秒
private
static
void
method4(string srcpath, string destpath) throws ioexception
bos.close();
bis.close();
}
共耗時:41毫秒
當把method2中的緩衝區設為bufferedinputstream的預設大小,即8192個位元組時,兩者的效率會非常接近
參考:
Java IO流 字元流 與 轉換流 詳解
乙個字元字元的讀 只能用來操作文字 不能寫其他格式 寫入字元流的抽象類 實現子類 filewriter 示例 public class demo04 fwriter.write c fwriter.flush fwriter.write c,1,3 fwriter.flush 使用字串直接寫入 fw...
ST Geometry效率的測試與分析
測試環境 資料庫 oracle11g r1 11.1.0.6 64bit 中介軟體 arcsde10 64bit 資料情況 點資料 point,231772條記錄 面資料 poly,12條記錄 如下圖所示 1 st geometry操作符的選擇 測試內容 測試面狀要素所包含的點狀要素的數量以及內容 ...
ST Geometry效率的測試與分析
測試環境 資料庫 oracle11g r1 11.1.0.6 64bit 中介軟體 arcsde10 64bit 資料情況 點資料 point,231772條記錄 面資料 poly,12條記錄 如下圖所示 1 st geometry操作符的選擇 測試內容 測試面狀要素所包含的點狀要素的數量以及內容 ...