Java-апплет работает медленно при использовании ByteArrayStream - PullRequest
1 голос
/ 24 июня 2011

Я преобразую xml в объект своего собственного класса, называемого "V6BasicCar", проблема, с которой я сталкиваюсь, заключается в том, что, если я включаю кэш Java (в панели управления Java):

enter image description here

каждое преобразование занимает около 3-4 секунд, но если я отключаю кэширование, это займет всего миллисекунды.Я не знаю, почему это происходит, мое единственное предположение состоит в том, что Java кэширует ByteArrayStream для каждого преобразования, и это замедляет его, но я не понял, как справиться с этой проблемой.Есть ли альтернатива ByteArray Stream, которая была бы быстрее?

Спасибо.

Код:

{
..

ByteArrayOutputStream out = new ByteArrayOutputStream();

//1. transform xml    
transform(getSourceXml(_intype), out);

//2. convert to bean
XsdConverter<V6BasicCar> v6BasicCarXsdConverter = new XsdConverter<V6BasicCar>(V6BasicCar.class);     
    /* 
    "getObject()" takes about 2 secs 
    */
V6BasicCar newV6BasicCar = v6BasicCarXsdConverter.getObject(convert(out));

..
}


 protected InputStream getSourceXml(final CsvWrapperMiddle _csvV6Car) throws IOException, JAXBException
{
    ByteArrayOutputStream out = new ByteArrayOutputStream();   

        /* 
        "getXml" takes about 2 secs 
        */
    xsdConverter.getXml(_csvV6Car.getExternalBean(), out); 
    InputStream output = convert(out);   
    return output;
}

protected InputStream convert(ByteArrayOutputStream out)
{
    return new ByteArrayInputStream(out.toByteArray());
}

1 Ответ

1 голос
/ 27 июня 2011

Проблема была внутри XsdConverter, особенно в JAXB. Установка значения com.sun.xml.bind.v2.runtime.JAXBContextImpl.fastBoot в значение «истинно» устранила проблему

...