Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jaxb进行XSLT处理以获得较小的转换性能_Java_Performance_Jaxb_Xslt 1.0 - Fatal编程技术网

Java 使用jaxb进行XSLT处理以获得较小的转换性能

Java 使用jaxb进行XSLT处理以获得较小的转换性能,java,performance,jaxb,xslt-1.0,Java,Performance,Jaxb,Xslt 1.0,我有一个简单的转换。我有一个java对象要转换成不同的java对象。所以我使用了xslt。jaxb是我的处理器 TransformerFactory transformerFactory = TransformerFactory.newInstance(); StreamSource streamSource = new StreamSource( new File("conv.xsl")); Transfo

我有一个简单的转换。我有一个java对象要转换成不同的java对象。所以我使用了xslt。jaxb是我的处理器

TransformerFactory transformerFactory = TransformerFactory.newInstance();
            StreamSource streamSource = new StreamSource(
                    new File("conv.xsl"));
            Transformer transformer = transformerFactory.newTransformer(streamSource);
            JAXBContext jc =JAXBContext.newInstance(Bags.class);
            JAXBSource jAXBSource = new JAXBSource(jc, device);
 jAXBResult = new JAXBResult(JAXBContext.newInstance(LargeBags.class));

            transformer.transform(jAXBSource, jAXBResult);

return result.getResult();

从性能角度来看,这样做可以吗?我可以用java代码实现这一点。这是一个很大的性能问题吗?还是一种好的做法?请帮助我,并感谢您的评论。除此之外,如果我有小的分组和计算,xslt是一种好方法吗?

从性能的角度来看,它当然不是最佳的:序列化到xml、转换xml、从xml反序列化都是代价高昂的操作。 但是,如果您有很多“相似”的类,例如不同的字段名,但有匹配的逻辑(例如有用户-其他人字段等),这有时是有意义的,因为编辑xslt表以提供实现转换比创建新的适配器类更快、更容易

但你绝对应该加快速度

创建jaxbContext一次,而不是每次调用,创建JAXB上下文是非常昂贵的操作。例如,将其存储在映射中,其中键是用于JAXBC创建的类:

JAXBContext getContext(Class cls) {
  if (contexts.containsKey(cls)) return contexts.get(cls);
  JAXBContect context = JAXBContext.newInstance(cls);
  contexts.put(cls,context);
  return context;
}
...
JAXBContext jc =getContext(Bags.class);
同样的把戏,变形金刚

请记住,变压器不是线程安全的,所以您需要 如果应用程序是多线程的,则在使用is之前在转换器上进行同步