XSSF: reduce memory usage by specifing default namespace for string keys in SharedStringsTable

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1092089 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Maxim Valyanskiy 2011-04-14 10:05:04 +00:00
parent 8dbcaac6fb
commit ade6735c43

View File

@ -20,10 +20,7 @@ package org.apache.poi.xssf.model;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlOptions;
@ -86,6 +83,14 @@ public class SharedStringsTable extends POIXMLDocumentPart {
private SstDocument _sstDoc;
private final static XmlOptions options = new XmlOptions();
static {
options.put( XmlOptions.SAVE_INNER );
options.put( XmlOptions.SAVE_AGGRESSIVE_NAMESPACES );
options.put( XmlOptions.SAVE_USE_DEFAULT_NAMESPACE );
options.setSaveImplicitNamespaces(Collections.singletonMap("", "http://schemas.openxmlformats.org/spreadsheetml/2006/main"));
}
public SharedStringsTable() {
super();
_sstDoc = SstDocument.Factory.newInstance();
@ -112,7 +117,7 @@ public class SharedStringsTable extends POIXMLDocumentPart {
count = (int)sst.getCount();
uniqueCount = (int)sst.getUniqueCount();
for (CTRst st : sst.getSiArray()) {
stmap.put(st.toString(), cnt);
stmap.put(getKey(st), cnt);
strings.add(st);
cnt++;
}
@ -121,6 +126,10 @@ public class SharedStringsTable extends POIXMLDocumentPart {
}
}
private String getKey(CTRst st) {
return st.xmlText(options);
}
/**
* Return a string item by index
*
@ -164,7 +173,7 @@ public class SharedStringsTable extends POIXMLDocumentPart {
* @return index the index of added entry
*/
public int addEntry(CTRst st) {
String s = st.toString();
String s = getKey(st);
count++;
if (stmap.containsKey(s)) {
return stmap.get(s);