java-哪个xml序列化库面向性能?

如果性能是决定因素,那么什么是Java的最佳XML序列化库?

应用重点

>基于休息的API.
> Tomcat Servlet容器
>需要Java对象才能进行XML序列化
>不需要反序列化或重绑定库.
>需要开源库.

目前的表现数字

>使用StringBuffer附加“<”,“>”生成的XML等等.

>平均响应时间= 15毫秒.
>容易出现格式错误的XML和xml编码错误.

>使用XStream序列化生成的XML.

>平均响应时间= 200毫秒.
>易于维护和注释.

我遇到的其他库,例如JiBx,JaxB,Castor或Simple,似乎是绑定框架,并且似乎负担很重.

还有其他用于XML序列化的高性能替代方法,还是我应该继续使用Woodstox Stax实现(使用报告似乎是稳定的开源库中最快的报告)使用XMLStreamWriter API来实现toXml()?

解决方法:

我非常怀疑XStream是否需要200毫秒,除非您要发送非常大的对象.您确定您的VM已预热吗?

我不会将StringBuffer用作其线程安全的每次调用都带有锁的方法.请改用StringBuilder.

以下测试打印

Took 56 us on average to serialise a Person

您进行序列化的时间要长4000倍.您的测试未预热,或者您正在发送大量数据.如果是后者,我建议以二进制格式发送数据.

// based on the example in the two-minute tutorial.
public class XStreamTest {
    public static class Person {
        private String firstname;
        private String lastname;
        private PhoneNumber phone;
        private PhoneNumber fax;

        public Person(String firstname, String lastname, PhoneNumber phone, PhoneNumber fax) {
            this.firstname = firstname;
            this.lastname = lastname;
            this.phone = phone;
            this.fax = fax;
        }
    }

    public static class PhoneNumber {
        private int code;
        private String number;

        public PhoneNumber(int code, String number) {
            this.code = code;
            this.number = number;
        }
    }

    public static void main(String... args) {
        XStream xstream = new XStream();
        xstream.alias("person", Person.class);
        xstream.alias("phonenumber", PhoneNumber.class);

        Person joe = new Person("Joe", "Walnes", new PhoneNumber(123, "1234-456"), new PhoneNumber(123, "9999-999"));

        final int warmup = 10000;
        final int runs = 20000;

        long start = 0;
        for (int i = -warmup; i < runs; i++) {
            if(i == 0) start = System.nanoTime();
            String xml = xstream.toXML(joe);
        }
        long time = System.nanoTime() - start;
        System.out.printf("Took %,d us on average to serialise a Person%n", time / runs / 1000);
    }
}
上一篇:PHP-简单的多个用户选择/选项


下一篇:Spring Cloud(Dalston.SR5)--Eureka 服务实例健康检查