Оптимизировать скорость загрузки xstream - PullRequest
4 голосов
/ 02 сентября 2010

Я чувствовал, что скорость загрузки xstream не соответствует моим требованиям, когда я пытаюсь выполнить загрузку из файла XML.Для «базы данных» с 10k ++ записями это займет несколько минут.

Ниже приведена вся структура данных, которую я использую для сериализации.Размер списка (символов и кодов) будет примерно 10k ++ записей.

http://jstock.cvs.sourceforge.net/viewvc/jstock/jstock/src/org/yccheok/jstock/engine/StockCodeAndSymbolDatabase.java?revision=1.11&view=markup

Есть ли какой-нибудь подход, который я могу попробовать, чтобы посмотреть, не ускорит ли это время загрузки?Важно также загружать предыдущий сохраненный файл.

Ниже приведен код, используемый для десериализации.Спасибо.

@SuppressWarnings("unchecked")
public static <A> A fromXML(Class c, File file) {
    XStream xStream = new XStream(new DomDriver("UTF-8"));
    InputStream inputStream = null;

    try {
        inputStream = new java.io.FileInputStream(file);
        Object object = xStream.fromXML(inputStream);
        if (c.isInstance(object)) {
            return (A)object;
        }
    }
    catch (Exception exp) {
        log.error(null, exp);
    }
    finally {
        if (false == close(inputStream)) {
        return null;
        }
        inputStream = null;
    }

    return null;
} 

1 Ответ

6 голосов
/ 02 сентября 2010

Избегайте использования медленного DomDriver.

@SuppressWarnings("unchecked")
public static <A> A fromXML(Class c, File file) {
    // Don't ever try to use DomDriver. They are VERY slow.
    XStream xStream = new XStream();
    InputStream inputStream = null;
    Reader reader = null;

    try {
        inputStream = new java.io.FileInputStream(file);
        reader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));
        Object object = xStream.fromXML(reader);

        if (c.isInstance(object)) {
            return (A)object;
        }
    }
    catch (Exception exp) {
        log.error(null, exp);
    }
    finally {
        if (false == close(reader)) {
            return null;
        }
        if (false == close(inputStream)) {
            return null;
        }
        reader = null;
        inputStream = null;
    }

    return null;
}
...