2014-01-30 45 views
0

我需要處理大Excel文件。我的問題是heap space,尤其是XLS格式。即使我有一個Apsose LighCells API來順序解析它,我需要從chunck中的數據庫中檢索文件。將Excel文件(保存在多個Blob中)順序讀入一個InputStream中

到目前爲止,我在數據庫中的文件大小爲40kb。我有一個Import表(存儲與導入有關的一般信息,例如開始和結束時間,數據類型等)和一個ImportData表(包含數據塊作爲斑點)。我有ImportImportData之間一對多的關係:

<hibernate-mapping> <class name="com.company.import.pojos.Import 
table="IMPORT_TABLE"> 
    <id name="id" type="integer"> 
     <column name="ID" /> 
     <generator class="some.id.generator.IdGenerator"></generator> 
    </id> 

    <property name="startTime" type="timestamp"> 
     <column name="START" /> 
    </property> 

    <property name="endTime" type="timestamp"> 
     <column name="END" /> 
    </property> 

    <property lazy="false" name="datatzpe" type="com.company.import.enums.ImportDataType"> 
     <column name="DATATYPE" /> 
    </property> 

    <bag name="importDataList" table="IMPORT_DATA" lazy="true" cascade="all" inverse="false"> 
     <key column="IMPORT_TABLE_ID"/> 
     <one-to-many class="com.company.import.pojos.ImportData"/> 
    </bag> 

    </class> </hibernate-mapping> 


<hibernate-mapping> <class 
name="com.company.import.pojos.ImportData" table="IMPORT_DATA"> 

    <id name="id" type="integer"> 
     <column name="ID" /> 
     <generator class="some.id.generator.IdGenerator"></generator> 
    </id> 

    <property name="importTableID" type="integer"> 
     <column name="IMPORT_TABLE_ID" /> 
    </property> 

    <property name="data" type="binary"> 
     <column name="DATA" /> 
    </property> 

    <property name="order" type="integer"> 
     <column name="ORDER" /> 
    </property> </class> </hibernate-mapping> 

我用Hibernate (4.2.3.Final),但不是一種選擇,甚至lazy loading因爲那時我會在內存中有這就是爲什麼我得到一個OutOfMemoryError ImportData對象的整個列表我想避免這種情況。

提供更多內存不是一種選擇(應用程序運行在運行其他應用程序的容器上,同時多個用戶可能同時處理文件,因此堆空間問題最終會發生),因此我正在尋找總是讀取下一塊數據並將其提供給給Aspose API的流。

創建我在閱讀Aspose工作簿只是這樣的:

InputStream inStream = ....;// get the input stream somehow 
Workbook workbook = new Workbook(inStream); 

回答

1

您可能需要實現自己的InputStream,它可以處理多個IS作爲一個,處理,當你到達一個你到底是關閉並選擇下一個填充讀緩衝區的其餘部分。

我不知道這種行爲的任何實現。

你的文件有多大?

+0

我們想要支持至少100 MB的文件(XLS和XLSX格式)。 XLS格式很難順序處理,我不知道'Aspose'是否可以做到這一點。現在我試着用一個可以處理多個blob的'InputStream'來處理API。 – Atticus

相關問題