1

我阅读了 Sun 人关于不仅使用 FastInfoSet,而且将其与外部词汇一起使用的美妙空间经济的说法。用于此目的的代码包含在最新版本 (1.2.8) 中,但并未完全记录在案。

对于许多文件,这对我来说非常有用。但是,我们提出了一个 XML 文件,当使用我创建的 vocab(使用 FI 库中的生成器)从 DOM 序列化该文件,然后读回 DOM 时,不匹配。不匹配都在 PC 数据中。

我只是在序列化程序上调用 setVocabulary 并使用从 URI 到阅读器上的词汇表的映射来调用 setExternalVocabulary。

我必须发明自己的机制来实际序列化一个词汇;FI 库中的任何地方似乎都没有。

一个棘手的问题是 org.jvnet.fastinfoset.Vocabulary 类是生成器给你的,但它不是解析器和序列化器吃的。我安排将这些序列化,然后使用下面的代码将它们转换为所需的对象:

private static void initializeAnalysis() {
    InputStream is = FastInfosetUtils.class.getResourceAsStream(ANALYSIS_VOCAB_CLASSPATH);
    try {
        ObjectInputStream ois = new ObjectInputStream(is);
        analysisJvnetVocab = (SerializableVocabulary) ois.readObject();
        ois.close();
    } catch (IOException e) {
        throw new RuntimeException(e);
    } catch (ClassNotFoundException e) {
        throw new RuntimeException(e);
    }
    analysisSerializerVocab = new SerializerVocabulary(analysisJvnetVocab.getVocabulary(), false);
    analysisParserVocab = new ParserVocabulary(analysisJvnetVocab.getVocabulary());
}

然后,实际编写文档:

 SerializerVocabulary fullVocab = new SerializerVocabulary();
 fullVocab.setExternalVocabulary(ANALYSIS_VOCAB_URI, analysisSerializerVocab, false);
 // pass fullVocab to setVocabulary.

并阅读:

 Map<Object, Object> vocabMap = new HashMap<Object, Object>();
 vocabMap.put(ANALYSIS_VOCAB_URI, analysisParserVocab);
 // pass map into setExternalVocabulary

我可以很容易地想象到创建序列化词汇的方法不对,这不像我在看教程。有人碰巧知道吗?

更新

由于这里没有人对这个问题有任何补充,我制作了一个测试用例并提交了一份错误报告。令我惊讶的是,事实证明它实际上是一个错误,并且已经进行了修复。

4

0 回答 0