2012-09-19 81 views
3

如何獲取Apache的POI文件大小HSSFWorkbook獲取HSSFWorkbook的長度

我有一個像

// inside Servlet 
OutputStream out = response.getOutputStream(); 
hSSFWorkbook.write(out); 

代碼,我想Content-Length頭添加到響應。

+0

從來沒有與POI合作,但我看到他們的Javadocs列表getBytes()返回一個字節數組,從中計算字節大小。 – asgs

+0

@asgs抱歉,我使用'Workbook'(接口),而不是'HSSFWorkbook'(實現)。忘記了解它。 – MyTitle

回答

4

最好的辦法是某處緩衝它,如

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
workbook.write(baos); 

int length = baos.size(); 
// Send length... 

// Send data 
OutputStream out = response.getOutputStream(); 
out.write(baos.toByteArray()); 
out.close(); 

你可以,如果你想避免使用內存

POI緩衝只會計算出當時的大小使用一個臨時文件,而不是它需要把所有東西寫出來,因爲計算大小几乎是寫出的一半!所以,你最好一次性獲得大小和序列化