【问题标题】:KML marshal produces zero-length filesKML marshal 生成零长度文件
【发布时间】:2012-09-04 16:08:11
【问题描述】:

在 Java 代码中,我生成一个线程,每秒从模拟器收集 DIS 数据包,并尝试格式化 KML 输出。在我的 Java 代码中,我正在创建一个带有样式、地标和多边形的文档。每秒一次,我可以看到“marshal”API 例程确实使用我的数据创建了一个 KML 文件。但是,随机有时会创建一个完整的文件,有时会创建一个零长度文件。即使我关闭了我的 DIS 数据包生成器,让我的 Java 代码仍在运行,它仍会继续随机创建一个完整的文件,有时还会创建一个零长度文件。当我将计时器从每秒更改为每 10 秒时,该行为每 10 秒发生一次。

我尝试将 marshal() 用于 File 对象和 OutputStream 对象;同样奇怪的行为。

【问题讨论】:

    标签: java marshalling kml jak


    【解决方案1】:

    这可能是由于并发访问。创建编组器是一项昂贵的操作,它需要时间,而且据我所知编组器不是线程安全的。我在 Restlet 中使用 jaxb 连接器,与 JAK 结合使用,这是 good example 关于如何创建编组器并以线程安全的方式缓存它们:

    /** Use thread identity to preserve safety of access to marshalers. */
    private final ThreadLocal<javax.xml.bind.Marshaller> marshaller = new ThreadLocal<javax.xml.bind.Marshaller>() {
    

    查看如何在同步方法中创建编组器,然后将其存储在 ThreadLocal 变量中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      相关资源
      最近更新 更多