编程语言
首页 > 编程语言> > java-Jettison或Kryo

java-Jettison或Kryo

作者:互联网

我目前正在将JAXB用于我正在从事的项目,并希望将我的库存档xml转换为存档json,以在我的项目中执行任务.我以为我会使用Jettison,因为它实际上可以与JAXB一起使用,所以它看起来像是easier to implement.但是,查看不包含Jettison的Older benchmarks,我发现Kryo生成的文件更小,并且序列化和反序列化的速度比某些替代方法更快.

谁能告诉我主要的不同之处,否则我可以将Jettison与Kryo的堆叠方式,特别是对于诸如Android应用程序之类的未来项目而言.

编辑:

我想我正在寻找产生较小文件并且运行更快的文件.因为我不打算只处理文件而只读取文件,所以会牺牲人类的可读性

解决方法:

注意:我是EclipseLink JAXB (MOXy)主管,并且是JAXB (JSR-222)专家组的成员.

由于您已经建立了JAXB映射并将XML转换为JSON,因此您可能会对EclipseLink JAXB(MOXy)感兴趣,它使用相同的JAXB元数据提供了对象到XML和对象到JSON的映射.

顾客

下面是带有JAXB批注的示例模型.

package forum11599191;

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {

    @XmlAttribute
    private int id;

    private String firstName;

    @XmlElement(nillable=true)
    private String lastName;

    private List<String> email;

}

jaxb.properties

要将MOXy用作JAXB提供程序,您需要在与域模型相同的软件包中包含一个名为jaxb.properties的文件,并带有以下条目(请参阅:http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html).

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

input.xml

<?xml version="1.0" encoding="UTF-8"?>
<customer id="123" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <firstName>Jane</firstName>
    <lastName xsi:nil="true"/>
    <email>jdoe@example.com</email>
</customer>

演示版

以下演示代码将从XML中填充对象,然后输出JSON.请注意,MOXy上没有编译时间相关性.

package forum11599191;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Customer.class);

        // Unmarshal from XML
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum11599191/input.xml");
        Customer customer = (Customer) unmarshaller.unmarshal(xml);

        // Marshal to JSON
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.setProperty("eclipselink.media-type", "application/json");
        marshaller.marshal(customer, System.out);
    }

}

JSON输出

以下是运行演示代码的输出.

{
   "customer" : {
      "id" : 123,
      "firstName" : "Jane",
      "lastName" : null,
      "email" : [ "jdoe@example.com" ]
   }
}

关于输出的一些注意事项:

>由于id字段是数字类型,因此将其编组为JSON,且不带引号.
>即使id字段是使用@XmlAttribute映射的,在JSON消息中也没有对此的特殊指示.
> email属性的大小为1,这在JSON输出中正确表示.
> xsi:nil机制用于指定lastName字段具有null值,该值已转换为JSON输出中的正确null表示形式.

欲获得更多信息

> http://blog.bdoughan.com/2011/08/json-binding-with-eclipselink-moxy.html
> http://blog.bdoughan.com/2012/04/binding-to-json-xml-handling-null.html
> http://blog.bdoughan.com/2011/04/jaxb-and-json-via-jettison.html

标签:serialization,deserialization,kryo,json,java
来源: https://codeday.me/bug/20191101/1980775.html