国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

國(guó)產(chǎn)一級(jí)a做爰片免費(fèi)網(wǎng)站哪個(gè)網(wǎng)站是免費(fèi)的

國(guó)產(chǎn)一級(jí)a做爰片免費(fèi)網(wǎng)站,哪個(gè)網(wǎng)站是免費(fèi)的,一建報(bào)考條件及專業(yè)要求,滄州做網(wǎng)站哪家好前言 最近有個(gè)項(xiàng)目在生產(chǎn)環(huán)境做數(shù)據(jù)導(dǎo)入時(shí),發(fā)現(xiàn)開始執(zhí)行導(dǎo)入任務(wù)會(huì)出現(xiàn)cpu狂飆的情況。幾番定位查找發(fā)現(xiàn)是在讀取excel的時(shí)候?qū)е麓藛栴}的發(fā)生,因此在通常使用的為POI的普通讀取,在遇到大數(shù)據(jù)量excel,50MB大小或數(shù)五十萬行的級(jí)別的…

前言


? ? ? 最近有個(gè)項(xiàng)目在生產(chǎn)環(huán)境做數(shù)據(jù)導(dǎo)入時(shí),發(fā)現(xiàn)開始執(zhí)行導(dǎo)入任務(wù)會(huì)出現(xiàn)cpu狂飆的情況。幾番定位查找發(fā)現(xiàn)是在讀取excel的時(shí)候?qū)е麓藛栴}的發(fā)生,因此在通常使用的為POI的普通讀取,在遇到大數(shù)據(jù)量excel,50MB大小或數(shù)五十萬行的級(jí)別的數(shù)據(jù)容易導(dǎo)致讀取時(shí)內(nèi)存溢出或者cpu飆升。需要注意,本文討論的是針對(duì)xlsx格式的excel文件上傳。

關(guān)于Excel相關(guān)技術(shù)


? ? ? ? 在Java技術(shù)生態(tài)圈中,可以進(jìn)行Excel處理的主流技術(shù)包括:Apache POI,JXL,Alibaba EasyExcel等。由于JXL只支持Excel2003以下版本,所以不太常見。

Apache POI:基于DOM方式進(jìn)行解析,將文件直接加載內(nèi)存,所以速度較快,適合Excel文件數(shù)量不大的應(yīng)用場(chǎng)景
Alibaba EasyExcel:采用逐行讀取的解析模式,將每一行的解析結(jié)果以觀察者模式通知處理(AnalyEventListener),所以比較適合數(shù)據(jù)體量較大的Excel文件解析。

問題代碼


? ? ? ?這種方式POI會(huì)把文件的所有內(nèi)容都加載到內(nèi)存中,讀取大的excel文件時(shí)很容易占用大量?jī)?nèi)存導(dǎo)致oom的發(fā)生,全部文件加載如下:

  /*** POI方式讀取excel** @param file*/public static void readExcelByPoi(File file) {long start = System.currentTimeMillis();//整個(gè)文件都一塊載入try (InputStream inp = new FileInputStream(file);Workbook wb = WorkbookFactory.create(inp)) {log.info("==讀取excel完畢,耗時(shí):{}毫秒,", System.currentTimeMillis() - start);Sheet sheet = wb.getSheetAt(0);//更新總數(shù)System.out.println("讀取結(jié)束行數(shù):" + sheet.getLastRowNum());} catch (Exception e) {e.printStackTrace();}}

當(dāng)前引入的poi依賴

        <!-- excel工具 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.0</version></dependency>

? ? ?讀取50MB我本地字段不是很多50萬行數(shù)據(jù)
首先在讀取excel文件的斷點(diǎn)執(zhí)行之前的cpu和內(nèi)存的占用分別為50%和42%,上傳的excel大小為50MB,這里我就不一一帶大家測(cè)試了,以上此種方式肯定是行不通的。

解決方案一:xlsx-streamer


? ? ? 我們采用分段緩存的方式加載數(shù)據(jù)到內(nèi)存中,此種方式在創(chuàng)建Workbook對(duì)象時(shí)借助xlsx-streamer(StreamingReader) 來創(chuàng)建一個(gè)緩沖區(qū)域批量地讀取文件 ,因此不會(huì)將整個(gè)文件實(shí)例化到對(duì)象當(dāng)中,代碼如下:

引入依賴:

        <!-- excel工具 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.0</version></dependency><!-- 讀取大量excel數(shù)據(jù)時(shí)使用 --><dependency><groupId>com.monitorjbl</groupId><artifactId>xlsx-streamer</artifactId><version>2.1.0</version></dependency>

示例代碼:

    /*** 大批量數(shù)據(jù)讀取 十萬級(jí)以上* 思路:采用分段緩存加載數(shù)據(jù),防止出現(xiàn)OOM的情況** @param file* @throws Exception*/public static void readLagerExcel(File file) throws Exception {InputStream inputStream = new FileInputStream(file);long start = System.currentTimeMillis();try (Workbook workbook = StreamingReader.builder().rowCacheSize(10 * 10)  //緩存到內(nèi)存中的行數(shù),默認(rèn)是10.bufferSize(1024 * 4)  //讀取資源時(shí),緩存到內(nèi)存的字節(jié)大小,默認(rèn)是1024.open(inputStream)) { //打開資源,可以是InputStream或者是File,注意:只能打開.xlsx格式的文件Sheet sheet = workbook.getSheetAt(0);log.info("==讀取excel完畢,耗時(shí):{}毫秒,", System.currentTimeMillis() - start);//遍歷所有的行for (Row row : sheet) {System.out.println("開始遍歷第" + row.getRowNum() + "行數(shù)據(jù):");//遍歷所有的列for (Cell cell : row) {System.out.print(cell.getStringCellValue() + " ");}System.out.println(" ");}//總數(shù)System.out.println("讀取結(jié)束行數(shù):" + sheet.getLastRowNum());}}

加載結(jié)果


40萬級(jí)別數(shù)據(jù)近花費(fèi)5秒,加載是不是很快了。

百萬級(jí)別,也就花費(fèi)7秒

前端也還做了個(gè)測(cè)試頁面如下:

Excel文件上傳

解決方案二:EasyExcel

? ? ?使用EasyExcel解決大文件Excel內(nèi)存溢出的問題,基于POI進(jìn)行封裝優(yōu)化,可以在不考慮性能、內(nèi)存的等因素的情況下,快速完成Excel的讀、寫等功能。

官網(wǎng): https://easyexcel.opensource.alibaba.com/
github:https://github.com/alibaba/easyexcel

引入依賴

        <!--easyExcel工具--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.1</version></dependency>

示例代碼


僅做簡(jiǎn)單讀取示例:

 /*** EasyExcel方式讀取excel* 讀取并封裝為對(duì)象,ExcelData大家需要的對(duì)象* @param file*/public static void readExcelByEasyExcel(File file) {long start = System.currentTimeMillis();List<ExcelData> excelDataList = EasyExcel.read(file).head(ExcelData.class).sheet(0).doReadSync();excelDataList.stream().forEach(x -> System.out.println(x.toString()));log.info("==讀取excel完畢,耗時(shí):{}毫秒,", System.currentTimeMillis() - start);}/*** EasyExcel方式讀取excel* 不指定head類* @param file*/public static void readExcelByEasyExcel1(File file) {long start = System.currentTimeMillis();List<Map<Integer, String>> listMap = EasyExcel.read(file).sheet(0).doReadSync();listMap.stream().forEach(x -> System.out.println(JSON.toJSONString(x)));log.info("==讀取excel完畢,耗時(shí):{}毫秒,", System.currentTimeMillis() - start);}

? ?得出一個(gè)結(jié)論就是使用阿里EasyExcel確實(shí)方便很多,不僅支持excel,csv也可以。支持的文件類型更多些,但是第一種方式也還可以,畢竟poi我們也一直在使用。

http://m.aloenet.com.cn/news/42348.html

相關(guān)文章:

  • 網(wǎng)絡(luò)營(yíng)銷模式包括哪些seo網(wǎng)站關(guān)鍵詞快速排名
  • 做網(wǎng)站放太多視頻seo項(xiàng)目分析
  • 十堰網(wǎng)站seo方法百度seo關(guān)鍵詞優(yōu)化公司
  • 做公司網(wǎng)站一般多少錢免費(fèi)軟件下載網(wǎng)站有哪些
  • 集團(tuán)網(wǎng)站建設(shè)方案書游戲推廣員是違法的嗎
  • 軟件開發(fā)步驟流程鄭州見效果付費(fèi)優(yōu)化公司
  • 廈門 微網(wǎng)站制作企業(yè)推廣策劃書
  • 做寵物食品的網(wǎng)站優(yōu)化落實(shí)疫情防控新十條
  • 上傳了網(wǎng)站源碼怎么做新聞最新熱點(diǎn)
  • 桓臺(tái)網(wǎng)站開發(fā)廣州:推動(dòng)優(yōu)化防控措施落地
  • 中國(guó)互聯(lián)網(wǎng)網(wǎng)站性能丈哥seo博客工具
  • 錦州網(wǎng)站建設(shè)多少錢網(wǎng)站排名掉了怎么恢復(fù)
  • wordpress 地址 .html臺(tái)州seo
  • 別人抄襲網(wǎng)站設(shè)計(jì)怎么辦設(shè)計(jì)師必備的6個(gè)網(wǎng)站
  • 尋花問柳一家專注做男人喜愛的網(wǎng)站什么網(wǎng)站推廣比較好
  • 諸城盟族網(wǎng)站建設(shè)北京做網(wǎng)站公司哪家好
  • 網(wǎng)上營(yíng)銷活動(dòng)長(zhǎng)沙網(wǎng)站seo分析
  • 學(xué)校校園網(wǎng)站建設(shè)方案上海網(wǎng)站營(yíng)銷seo方案
  • 做圖片的網(wǎng)站外貿(mào)建站
  • 網(wǎng)站開發(fā)研究背景域名搜索
  • 做網(wǎng)站 警察佛山抖音seo
  • macos做網(wǎng)站快速網(wǎng)站推廣
  • 網(wǎng)站開發(fā)技術(shù)項(xiàng)目北京seo相關(guān)
  • 免費(fèi)做網(wǎng)站方案新手怎么做seo優(yōu)化
  • win2012 iis 部署網(wǎng)站運(yùn)營(yíng)是做什么的
  • 網(wǎng)站轉(zhuǎn)化分析百度優(yōu)化怎么做
  • 大連市建委官方網(wǎng)站推廣一般收多少錢
  • java python 做網(wǎng)站武漢seo認(rèn)可搜點(diǎn)網(wǎng)絡(luò)
  • 北京營(yíng)銷型網(wǎng)站建設(shè)價(jià)格西安百度推廣運(yùn)營(yíng)公司
  • 色母粒對(duì)網(wǎng)站的建議和優(yōu)化