Java:需要帮助优化代码的一部分

时间:2011-05-02 13:51:02

标签: java optimization transform

我有一个简单的转换XML代码,但它非常耗时(我必须重复多次)。有没有人建议如何优化此代码?感谢。

编辑:这是代码的新版本。我不幸地无法重用Transformer,因为XSLTRule在大多数情况下是不同的。我现在正在重用TransformerFactory。我之前没有读取文件,因此我无法使用StreamSource。花在初始化Transformer上的时间最长。

private static TransformerFactory tFactory = TransformerFactory.newInstance();

public static String transform(String XML, String XSLTRule) throws TransformerException {

    Source xmlInput = new StreamSource(new StringReader(XML));
    Source xslInput = new StreamSource(new StringReader(XSLTRule));

    Transformer transformer = tFactory.newTransformer(xslInput);

    StringWriter resultWriter = new StringWriter();
    Result result = new StreamResult(resultWriter);
    transformer.transform(xmlInput, result);
    return resultWriter.toString();
}

4 个答案:

答案 0 :(得分:3)

您应该做的第一件事是跳过不必要的XML字符串转换为字节(特别是使用硬编码,可能不正确的编码)。您可以使用StringReader并将其传递给StreamSource构造函数。结果相同:使用StringWriter并避免转换。

当然,如果您在首先将XML从文件(字节)转换为String之后调用该方法(再次使用可能错误的编码),那么拥有{会更好{1}}直接从文件中读取。

答案 1 :(得分:1)

您似乎将XSLT应用于XML文件。为了加快速度,您可以尝试编译XSLT,就像XSLTC一样。

答案 2 :(得分:0)

我只能想到几件小事:

  • 可以重复使用TransformerFactory。

  • 如果线程受限,则可以重用Transformer,每次XSL输入都相同。

  • 如果您可以合理准确地估算输出大小,可以使用初始大小提示创建ByteArrayOutputStream。

答案 3 :(得分:0)

正如迈克尔斯回答的那样,你可以通过不自己将输入或输出xml完全加载到内存中来加快速度,并使你的api流基于。