1、csv和excel讀寫對比
開發中經常遇到數據導入和導出功能,csv 和 excel是最常見的數據格式,本文比較了下csv和excel讀寫相同數據的效率:
測試數據格式一
用上面模板數據生成的測試:
耗時時間統計:
測試數據格式二
生成數據:
耗時統計:
相同格式相同行數對比:
- csv文件比excel文件稍大
- csv讀取/寫入比excel快
工具類可以看出:csv讀寫是以行為單位來實現的;excel讀取inputstream是直接加載到內存的。
如果用以上excel工具類讀寫一般需求都可以應付,如果遇到大量數據的讀寫,使用inputstream加載到內存的方式可能就會出現OOM問題。
2、excel大量數據寫
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; }
3、excel大量數據讀
大量數據讀取直接使用workbook加載會出現OOM異常,一個好的辦法是分批讀取,參考:excel大量數據讀取