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

Apache POI中HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook的區(qū)別解析

 更新時間:2026年07月06日 15:40:42   作者:五月天的尾巴  
這篇文章給大家介紹Apache POI中HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook的區(qū)別解析,本文結合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧

一、前言

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

二、Workbook的三個實現(xiàn)類

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

實現(xiàn)類支持的文件格式對應Excel版本文件擴展名
HSSFWorkbookHSSF (Horrible SpreadSheet Format)Excel 97-2003.xls
XSSFWorkbookXSSF (XML SpreadSheet Format)Excel 2007+.xlsx
SXSSFWorkbook基于XSSF的流式擴展Excel 2007+.xlsx

SXSSFWorkbook‌

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

三個類的API設計高度一致,切換起來非常方便:

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();

三、三個實現(xiàn)類的核心區(qū)別

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

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

主要特點:

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

適用場景:

  • 需要兼容老舊系統(tǒng),必須輸出.xls格式
  • 數(shù)據(jù)量很小(< 6.5萬行)
  • 對性能要求極高且數(shù)據(jù)量可控

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

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

主要特點:

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

適用場景:

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

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

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

主要特點:

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

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

  • autoSizeColumn() - 自動調(diào)整列寬
  • cloneSheet() - 克隆工作表
  • 對已刷新行的隨機訪問(getRow()可能返回null)
  • 公式求值(涉及已刷新行的公式)
  • shiftColumns() - 列位移操作

適用場景:

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

四、性能數(shù)據(jù)說話

口說無憑,我們來看一組權威的性能測試數(shù)據(jù)(來自Baeldung的JMH基準測試):

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

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

內(nèi)存消耗對比(單位: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ù)消耗高達10GB內(nèi)存
  • SXSSFWorkbook的內(nèi)存占用穩(wěn)定在210MB左右,優(yōu)勢極其明顯
  • HSSFWorkbook雖然速度快,但受限于行數(shù)上限,無法處理大規(guī)模數(shù)據(jù)

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

5.1、決策樹:三步選對Workbook

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

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

場景1:常規(guī)報表導出(幾千到幾萬行)

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

場景2:百萬級數(shù)據(jù)導出,無需復雜樣式

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

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

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

六、SXSSFWorkbook使用注意事項

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

6.1、及時清理臨時文件

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

6.2、避免使用受限功能

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

6.3、合理設置窗口大小

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

七、結語

Apache POI的三個Workbook實現(xiàn)類各有千秋,沒有絕對的"最好",只有最適合你當前場景的選擇。簡單總結一下:

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

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

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

到此這篇關于Apache POI中HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook的區(qū)別解析的文章就介紹到這了,更多相關apache poi詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解寶塔Linux面板FTP無法連接的解決辦法

    詳解寶塔Linux面板FTP無法連接的解決辦法

    這篇文章主要介紹了詳解寶塔Linux面板FTP無法連接的解決辦法,文章中詳細的介紹了FTP無法連接的解決方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Linux操作系統(tǒng)查看不到IP地址的解決方法

    Linux操作系統(tǒng)查看不到IP地址的解決方法

    這篇文章主要為大家詳細介紹了在新創(chuàng)建的Linux虛擬機中,如何使用ifconfig命令解決無法查看到IP地址的問題,有需要的小伙伴可以借鑒一下
    2024-12-12
  • Linux基本命令及Linux文件類型用法及說明

    Linux基本命令及Linux文件類型用法及說明

    本文主要講解了Linux文件類型、目錄切換命令、目錄操作命令、查找命令、文件內(nèi)容查看命令、文件內(nèi)容查詢命令以及文本處理命令,文中詳細解釋了每種命令的功能、使用方法及參數(shù)選項,并通過實例展示了命令的具體用法
    2026-05-05
  • centos7下搭建ZooKeeper3.4中間件常用命令小結

    centos7下搭建ZooKeeper3.4中間件常用命令小結

    Zookeeper 作為一個分布式的服務框架,主要用來解決分布式集群中應用系統(tǒng)的一致性問題,它能提供基于類似于文件系統(tǒng)的目錄節(jié)點樹方式的數(shù)據(jù)存儲。這篇文章主要介紹了centos7下搭建ZooKeeper3.4中間件常用命令小結,需要的朋友可以參考下
    2019-07-07
  • Linux的GPIO驅動程序使用詳解

    Linux的GPIO驅動程序使用詳解

    文章詳細解析了Linux系統(tǒng)中GPIO驅動程序的結構及多層抽象,說明了從硬件寄存器到內(nèi)核與用戶空間API的實現(xiàn)過程,并通過具體開發(fā)板實例,展示了驅動注冊、訪問與共享機制,總結:Linux GPIO驅動層次清晰,保障了平臺兼容性與安全訪問
    2025-10-10
  • 無法啟動Apache的問題解決方法

    無法啟動Apache的問題解決方法

    這篇文章主要介紹了無法啟動Apache的問題解決方法,需要的朋友可以參考下
    2014-05-05
  • linux中的相對路徑的表示方法

    linux中的相對路徑的表示方法

    在本篇文章里小編給各位分享的是關于linux中的相對路徑的表示方法,需要的朋友們可以學習下。
    2020-03-03
  • Linux查看進程的所有信息的方法示例

    Linux查看進程的所有信息的方法示例

    這篇文章主要介紹了Linux查看進程的所有信息的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Linux系統(tǒng)下gcc命令使用詳解

    Linux系統(tǒng)下gcc命令使用詳解

    大家好,本篇文章主要講的是Linux系統(tǒng)下gcc命令使用詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • centos6.5升級安裝配置supervisor的教程

    centos6.5升級安裝配置supervisor的教程

    Supervisor 是用Python開發(fā)的一個client/server服務,是Linux/Unix系統(tǒng)下的一個進程管理工具,不支持Windows系統(tǒng)。這篇文章主要介紹了centos6.5升級安裝配置supervisor的方法,需要的朋友可以參考下
    2019-11-11

最新評論

云霄县| 郧西县| 化隆| 齐河县| 潞西市| 安新县| 新巴尔虎左旗| 社旗县| 县级市| 内丘县| 手游| 营口市| 南陵县| 晋城| 读书| 乃东县| 中江县| 招远市| 芦溪县| 响水县| 离岛区| 北流市| 利辛县| 阿坝| 南充市| 临沂市| 轮台县| 靖西县| 木里| 湖北省| 克拉玛依市| 曲松县| 临朐县| 香格里拉县| 宜章县| 镇安县| 吉林省| 新乡市| 九寨沟县| 绥化市| 瑞金市|