最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Apache POI的Workbook的幾種實(shí)現(xiàn)類(lèi)及具體區(qū)別解析

 更新時(shí)間:2026年07月06日 15:44:05   作者:五月天的尾巴  
在java項(xiàng)目中,我們經(jīng)常使用Apache POI的包導(dǎo)出Excel文件,但是在創(chuàng)建Workbook的時(shí)候,有三種選型HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook可以選擇,本文總結(jié)一下這三個(gè)實(shí)現(xiàn)類(lèi)的區(qū)別,感興趣的朋友一起看看吧

一、前言

在java項(xiàng)目中,我們經(jīng)常使用Apache POI的包導(dǎo)出Excel文件,但是在創(chuàng)建Workbook的時(shí)候,有三種選型HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook可以選擇,本文總結(jié)一下這三個(gè)實(shí)現(xiàn)類(lèi)的區(qū)別。

二、Workbook的三個(gè)實(shí)現(xiàn)類(lèi)

在Apache POI中,Workbook接口 代表一個(gè)Excel工作簿(即一個(gè)Excel文件)。針對(duì)不同版本的Excel文件,POI提供了三個(gè)主要的實(shí)現(xiàn)類(lèi):

實(shí)現(xiàn)類(lèi)支持的文件格式對(duì)應(yīng)Excel版本文件擴(kuò)展名
HSSFWorkbookHSSF (Horrible SpreadSheet Format)Excel 97-2003.xls
XSSFWorkbookXSSF (XML SpreadSheet Format)Excel 2007+.xlsx
SXSSFWorkbook基于XSSF的流式擴(kuò)展Excel 2007+.xlsx

SXSSFWorkbook‌

  • 也是用于.xlsx格式,但它主要用于處理非常大的電子表格文件,通過(guò)在內(nèi)存中僅保留一定數(shù)量的行來(lái)優(yōu)化性能。
  • SXSSFWorkbook非常適合用于生成非常大的電子表格文件,因?yàn)樗梢詼p少內(nèi)存使用。

三個(gè)類(lèi)的API設(shè)計(jì)高度一致,切換起來(lái)非常方便:

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
// 使用HSSFWorkbook創(chuàng)建.xls文件
Workbook workbook = new HSSFWorkbook();
// 使用XSSFWorkbook創(chuàng)建.xlsx文件
Workbook workbook = new XSSFWorkbook();
// 使用SXSSFWorkbook創(chuàng)建.xlsx文件(低內(nèi)存模式)
Workbook workbook = new SXSSFWorkbook();

三、三個(gè)實(shí)現(xiàn)類(lèi)的核心區(qū)別

3.1、HSSFWorkbook:老兵不死,但已逐漸凋零

HSSFWorkbook是POI中最古老的實(shí)現(xiàn),對(duì)應(yīng)的是Excel 97-2003版本的二進(jìn)制格式(.xls)。

主要特點(diǎn):

  • 行數(shù)限制:每個(gè)Sheet最多支持65535行,超過(guò)會(huì)報(bào)錯(cuò)
  • 列數(shù)限制:最多支持256列
  • 內(nèi)存模型所有數(shù)據(jù)全部加載到內(nèi)存中
  • 性能表現(xiàn):由于是二進(jìn)制格式,處理速度反而是三個(gè)中最快的

適用場(chǎng)景:

  • 需要兼容老舊系統(tǒng),必須輸出.xls格式
  • 數(shù)據(jù)量很?。?lt; 6.5萬(wàn)行)
  • 對(duì)性能要求極高且數(shù)據(jù)量可控

3.2、XSSFWorkbook:現(xiàn)代辦公的主力軍

隨著Excel 2007推出新的OpenXML格式(.xlsx),POI推出了XSSFWorkbook來(lái)支持這種基于XML的新格式。

主要特點(diǎn):

  • 行數(shù)限制:每個(gè)Sheet最多支持1048576行(約104萬(wàn)行)
  • 列數(shù)限制:最多支持16384列
  • 內(nèi)存模型所有數(shù)據(jù)全部加載到內(nèi)存中,內(nèi)存占用是HSSFWorkbook的2-7倍
  • 性能表現(xiàn):由于XML解析的開(kāi)銷(xiāo),處理速度最慢,比HSSFWorkbook慢約30倍

適用場(chǎng)景:

  • 需要輸出.xlsx格式
  • 數(shù)據(jù)量中等(幾十萬(wàn)行以?xún)?nèi))
  • 內(nèi)存充足,且需要使用完整的Excel功能(樣式、公式、圖表等)

3.3、SXSSFWorkbook:大數(shù)據(jù)處理的救星

從POI 3.8版本開(kāi)始,推出了基于XSSF的流式實(shí)現(xiàn)SXSSFWorkbook,專(zhuān)門(mén)為了解決大數(shù)據(jù)量導(dǎo)出時(shí)的內(nèi)存溢出問(wèn)題。

主要特點(diǎn):

  • 行數(shù)限制:與XSSFWorkbook相同,支持百萬(wàn)行級(jí)別
  • 內(nèi)存模型流式處理默認(rèn)只在內(nèi)存中保留100行,超出的行會(huì)刷新到磁盤(pán)臨時(shí)文件中
  • 性能表現(xiàn):介于HSSF和XSSF之間,但內(nèi)存占用穩(wěn)定,幾乎不隨數(shù)據(jù)量增長(zhǎng)

功能限制(重要?。?/strong>
由于數(shù)據(jù)被刷新到磁盤(pán),以下功能無(wú)法使用

  • autoSizeColumn() - 自動(dòng)調(diào)整列寬
  • cloneSheet() - 克隆工作表
  • 對(duì)已刷新行的隨機(jī)訪(fǎng)問(wèn)(getRow()可能返回null)
  • 公式求值(涉及已刷新行的公式)
  • shiftColumns() - 列位移操作

適用場(chǎng)景:

  • 百萬(wàn)級(jí)數(shù)據(jù)導(dǎo)出
  • 內(nèi)存受限的環(huán)境
  • 不需要上述受限功能(或可以在導(dǎo)出完成后處理)

四、性能數(shù)據(jù)說(shuō)話(huà)

口說(shuō)無(wú)憑,我們來(lái)看一組權(quán)威的性能測(cè)試數(shù)據(jù)(來(lái)自Baeldung的JMH基準(zhǔn)測(cè)試):

執(zhí)行時(shí)間對(duì)比(單位:毫秒)

行數(shù)HSSFWorkbookXSSFWorkbookSXSSFWorkbook
2,500732,658296
10,00034710,9941,808
20,00075421,7333,751
40,0001,45542,3317,342

內(nèi)存消耗對(duì)比(單位:MB)

行數(shù)HSSFWorkbookXSSFWorkbookSXSSFWorkbook
2,5008281,871258
10,0001,2684,136209
20,0001,7667,443209
40,0001,47510,119210

從數(shù)據(jù)中可以清晰看到:

  • XSSFWorkbook是典型的"內(nèi)存殺手",40k行數(shù)據(jù)消耗高達(dá)10GB內(nèi)存
  • SXSSFWorkbook的內(nèi)存占用穩(wěn)定在210MB左右,優(yōu)勢(shì)極其明顯
  • HSSFWorkbook雖然速度快,但受限于行數(shù)上限,無(wú)法處理大規(guī)模數(shù)據(jù)

五、實(shí)際開(kāi)發(fā)中的選型建議

5.1、決策樹(shù):三步選對(duì)Workbook

開(kāi)始選型
    ↓
是否需要輸出.xls格式?
    ├─ 是 → 數(shù)據(jù)量<6.5萬(wàn)行? → 是 → HSSFWorkbook
    │                        → 否 → 無(wú)法滿(mǎn)足,考慮分批導(dǎo)出或升級(jí)格式
    ↓
是否需要完整的Excel功能(樣式、公式、圖表等)?
    ├─ 是 → 數(shù)據(jù)量<10萬(wàn)行且內(nèi)存充足? → 是 → XSSFWorkbook
    │                              → 否 → 考慮分批寫(xiě)入+ XSSFWorkbook
    ↓
是否需要處理超大數(shù)據(jù)量(>10萬(wàn)行)?
    ├─ 是 → 能否接受功能限制? → 是 → SXSSFWorkbook
    │                        → 否 → 考慮EasyExcel或分批導(dǎo)出
    ↓
默認(rèn)選擇 → XSSFWorkbook(常規(guī)場(chǎng)景)

5.2、實(shí)戰(zhàn)經(jīng)驗(yàn)分享

場(chǎng)景1:常規(guī)報(bào)表導(dǎo)出(幾千到幾萬(wàn)行)

// 推薦使用XSSFWorkbook,功能完整,開(kāi)發(fā)簡(jiǎn)單
try (Workbook workbook = new XSSFWorkbook()) {
    // 正常的樣式、公式處理
}

場(chǎng)景2:百萬(wàn)級(jí)數(shù)據(jù)導(dǎo)出,無(wú)需復(fù)雜樣式

// SXSSFWorkbook是最佳選擇
SXSSFWorkbook workbook = new SXSSFWorkbook(100); // 設(shè)置內(nèi)存窗口大小為100
try {
    // 分批寫(xiě)入數(shù)據(jù)
    for (...) {
        Row row = sheet.createRow(...);
        // 填充數(shù)據(jù)
    }
} finally {
    // 務(wù)必清理臨時(shí)文件
    workbook.dispose();
    workbook.close();
}

場(chǎng)景3:需要復(fù)雜樣式,但數(shù)據(jù)量也大
這種情況下可以采取折中方案

  1. 使用XSSFWorkbook創(chuàng)建模板,設(shè)置好所有樣式
  2. 使用SXSSFWorkbook基于模板填充數(shù)據(jù)
  3. 或者使用EasyExcel等封裝庫(kù)

六、SXSSFWorkbook使用注意事項(xiàng)

如果選擇了SXSSFWorkbook,有幾個(gè)坑需要特別注意:

6.1、及時(shí)清理臨時(shí)文件

SXSSFWorkbook workbook = new SXSSFWorkbook();
try {
    // 處理數(shù)據(jù)...
} finally {
    workbook.dispose(); // 刪除臨時(shí)文件
    workbook.close();
}

6.2、避免使用受限功能

// 以下代碼會(huì)拋出異常
sheet.autoSizeColumn(0); // IllegalStateException
workbook.cloneSheet(0);   // IllegalStateException

6.3、合理設(shè)置窗口大小

// 窗口大小設(shè)置原則:
// - 越小,內(nèi)存占用越低,但功能限制影響越大
// - 越大,可用功能越多,但內(nèi)存占用越高
SXSSFWorkbook workbook = new SXSSFWorkbook(500); // 根據(jù)實(shí)際需求調(diào)整

七、結(jié)語(yǔ)

Apache POI的三個(gè)Workbook實(shí)現(xiàn)類(lèi)各有千秋,沒(méi)有絕對(duì)的"最好",只有最適合你當(dāng)前場(chǎng)景的選擇。簡(jiǎn)單總結(jié)一下:

  • HSSFWorkbook:老當(dāng)益壯,但已是過(guò)去式
  • XSSFWorkbook:中規(guī)中矩,日常開(kāi)發(fā)主力
  • SXSSFWorkbook:黑馬選手,大數(shù)據(jù)場(chǎng)景必備

在實(shí)際項(xiàng)目中,建議根據(jù)數(shù)據(jù)量、功能需求、內(nèi)存限制這三個(gè)維度綜合評(píng)估。如果數(shù)據(jù)量真的到了百萬(wàn)級(jí)別,且功能需求復(fù)雜,也可以考慮阿里開(kāi)源的EasyExcel,它在POI基礎(chǔ)上做了進(jìn)一步的封裝和優(yōu)化,同樣值得關(guān)注。

希望這篇文章能幫你徹底搞懂POI的Workbook家族,從此不再為Excel導(dǎo)出發(fā)愁!

到此這篇關(guān)于Apache POI的Workbook的幾種實(shí)現(xiàn)類(lèi)及具體區(qū)別的文章就介紹到這了,更多相關(guān)Apache POI Workbook內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Apache?Doris?中Compaction問(wèn)題分析和典型案例分析

    Apache?Doris?中Compaction問(wèn)題分析和典型案例分析

    這篇文章主要介紹了Apache?Doris?中Compaction問(wèn)題分析和典型案例,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-08-08
  • Linux中實(shí)時(shí)查看日志的三種方法

    Linux中實(shí)時(shí)查看日志的三種方法

    本文介紹了Linux中實(shí)時(shí)查看日志的三種方法:使用tail命令(結(jié)合-f選項(xiàng)和grep進(jìn)行過(guò)濾),利用multitail工具實(shí)現(xiàn)多日志文件的拆分視圖監(jiān)控,以及用less命令的+F選項(xiàng)實(shí)時(shí)跟蹤文件變化,這些方法幫助系統(tǒng)管理員更有效地監(jiān)控和分析日志文件,需要的朋友可以參考下
    2025-02-02
  • Linux服務(wù)使用寶塔面板搭建網(wǎng)站并發(fā)布公網(wǎng)訪(fǎng)問(wèn)

    Linux服務(wù)使用寶塔面板搭建網(wǎng)站并發(fā)布公網(wǎng)訪(fǎng)問(wèn)

    寶塔面板作為簡(jiǎn)單好用的服務(wù)器運(yùn)維管理面板,它支持Linux/Windows系統(tǒng),本文我們將演示使用寶塔面板快速簡(jiǎn)單搭建本地web網(wǎng)站,并做內(nèi)網(wǎng)穿透,實(shí)現(xiàn)不在同個(gè)局域網(wǎng)下的用戶(hù)也可以訪(fǎng)問(wèn)到本地web站點(diǎn),無(wú)需公網(wǎng)IP,也不用設(shè)置路由器,需要的朋友可以參考下
    2023-08-08
  • 在Linux/WSL2環(huán)境下安裝和配置Claude Code的全過(guò)程

    在Linux/WSL2環(huán)境下安裝和配置Claude Code的全過(guò)程

    這篇文章就帶你從0開(kāi)始,在Linux/WSL2環(huán)境下完成安裝、API配置到成功啟動(dòng)的Claude Code 全流程,我會(huì)用API中轉(zhuǎn)服務(wù)簡(jiǎn)化 國(guó)內(nèi)直連,避免翻 墻和海外賬戶(hù)問(wèn)題,盡量把每個(gè)步驟講清楚,讓你少踩坑,需要的朋友可以參考下
    2026-05-05
  • 使用 bind 設(shè)置 DNS 服務(wù)器的方法

    使用 bind 設(shè)置 DNS 服務(wù)器的方法

    Bind9是一個(gè)強(qiáng)大的Linux下開(kāi)放源代碼的DNS服務(wù)器軟件,這篇文章主要介紹了使用 bind 設(shè)置 DNS 服務(wù)器的方法,需要的朋友可以參考下
    2020-03-03
  • linux apache下虛擬主機(jī)配置方法

    linux apache下虛擬主機(jī)配置方法

    配置linux下虛擬主機(jī)的朋友能用的到,一個(gè)備份,感謝作者
    2008-07-07
  • CentOS系統(tǒng)使用yum命令報(bào)錯(cuò)問(wèn)題及解決

    CentOS系統(tǒng)使用yum命令報(bào)錯(cuò)問(wèn)題及解決

    文章主要講述了在CentOS系統(tǒng)中使用yum命令時(shí)遇到的錯(cuò)誤,并提供了個(gè)人解決方法,希望對(duì)大家有所幫助,并鼓勵(lì)大家支持腳本之家
    2024-12-12
  • Ubuntu忘記密碼重置的詳細(xì)教程

    Ubuntu忘記密碼重置的詳細(xì)教程

    虛擬機(jī)裝了Ubuntu,太久沒(méi)有用導(dǎo)致密碼忘記了,自己搗鼓了下,成功修改原賬戶(hù)密碼,所以本文記錄了一下Ubuntu忘記密碼重置的詳細(xì)教程,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2025-03-03
  • Linux、CentOS下安裝zip與unzip指令功能(服務(wù)器)

    Linux、CentOS下安裝zip與unzip指令功能(服務(wù)器)

    這篇文章主要介紹了Linux、CentOS下安裝zip與unzip指令的操作方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-11-11
  • Linux中實(shí)現(xiàn)線(xiàn)程同步的6種方法

    Linux中實(shí)現(xiàn)線(xiàn)程同步的6種方法

    本文詳細(xì)介紹了Linux下線(xiàn)程同步的多種方法,包括互斥鎖、自旋鎖、信號(hào)量以及它們的使用示例,通過(guò)這些同步機(jī)制,可以解決線(xiàn)程安全問(wèn)題,防止資源競(jìng)爭(zhēng)導(dǎo)致的錯(cuò)誤,示例代碼展示了如何在多線(xiàn)程環(huán)境中正確地管理共享資源,確保線(xiàn)程安全,需要的朋友可以參考下
    2024-11-11

最新評(píng)論

拜泉县| 长岛县| 双牌县| 南川市| 陕西省| 霍城县| 利川市| 天门市| 攀枝花市| 九龙坡区| 德格县| 盘山县| 淳化县| 禹州市| 日照市| 砀山县| 梁平县| 济阳县| 香格里拉县| 民县| 久治县| 桂林市| 宁强县| 蕲春县| 靖西县| 合阳县| 连城县| 兴业县| 佛山市| 隆子县| 资源县| 乌拉特前旗| 遵义市| 吴忠市| 西充县| 游戏| 大田县| 固阳县| 武定县| 宜兰市| 梁平县|