開發中常常遇到數據導入和導出功能,csv 和 excel是最多見的數據格式,本文比較了下csv和excel讀寫相同數據的效率: git
用上面模板數據生成的測試:github
耗時時間統計: 工具
生成數據:測試
耗時統計:spa
相同格式相同行數對比:excel
csv文件讀取工具類code
excel文件讀取工具類blog
工具類能夠看出:csv讀寫是以行爲單位來實現的;excel讀取inputstream是直接加載到內存的。內存
若是用以上excel工具類讀寫通常需求均可以應付,若是遇到大量數據的讀寫,使用inputstream加載到內存的方式可能就會出現OOM問題。開發
excel工具類裏處理了大量寫的問題(SXSSFWorkbook分片對excel進行寫入,上例中的100w測試數據就是這麼寫入的):
/** * 建立一個Workbook * @param fileType * @return * @throws Exception */ private static Workbook createWorkBook(String fileType) throws IOException { Workbook wb; if (excel2003L.equals(fileType)) { //2003- wb = new HSSFWorkbook(); } else if (excel2007U.equals(fileType)) { //2007+ 內存留存數據 wb = new SXSSFWorkbook(10000); } else { throw new IOException("解析的文件格式有誤!"); } return wb; }
大量數據讀取直接使用workbook加載會出現OOM異常,一個好的辦法是分批讀取,參考:excel大量數據讀取