XStream或Simple

Ade*_*ari 7 java xml xstream jaxb pojo

我需要决定使用哪一个.我的情况非常简单.我需要将一个简单的POJO/Bean转换为XML,然后再转换回来.没什么特别的.

我要找的一件事是它应该包括父属性.如果它可以在超类型上工作,那将是最好的,它可以只是一个标记界面.

如果有人可以将这两者与缺点和专业人士进行比较,那么哪一个缺少哪一个.我知道XStream也支持JSON,这是一个优点.但是,如果我们将JSON放在一边,Simple看起来就更简单了.在开发和社区方面,Simple的未来是什么?XStream非常受欢迎我相信,即使是"XStream"这个词,在SO上打了很多线程.

谢谢.

Pot*_*eer 11

只是阅读文档(我正面临着同样的问题,但是还没有尝试过任何一种方式;带上一粒盐):

XSTREAM

  1. 非常非常容易谷歌.有关它的示例,论坛帖子和博客文章很容易找到.
  2. 开箱即用.(当然,可能需要更多调整,但它会立即给你一些东西.)
  3. 将变量转换为属性需要创建单独的转换器类,并使用XStream注册它.(对于简单的值来说并不难,但这是一项额外的工作.)
  4. 除非你添加XMT(另一个库),否则根本不处理版本控制; 如果您的类生成的XML发生更改,则根本不会反序列化.(一旦你添加XMT,你可以改变你喜欢的类,并让XStream处理得很好,只要你创建一个增加版本的增量版本功能.)
  5. 所有调整都要求您编写代码,以实现自己的(反)序列化函数,或调用XStream函数来改变所使用的(反)序列化技术.
  6. 琐碎的语法注释:您需要将反序列化器的输出强制转换为您的类.

简单

  1. 主页是唯一可靠的信息来源; 它列出了大约六篇外部文章,并且有一个邮件列表,但你无法在狂野的互联网上找到它.
  2. 需要在代码工作之前注释代码.
  3. 对于每个属性,使用属性而不是XML节点来制作更紧凑的XML文件很容易.
  4. 只要类正确,就可以通过非严格的解析来处理版本控制,但版本不同.(即,如果您添加了两个字段并从上一个版本中删除了一个字段,它将忽略已删除的字段而不会抛出异常,但不会设置添加的字段.)与XStream一样,它似乎没有将数据从一个版本迁移到另一个版本的方法,但与XStream不同,没有外部库可以介入并处理它.据推测,处理这个问题的方法是使用一些外部函数(也许是你班级中的"版本"变量?),所以你这样做了

    填充myRestoredStuff = serializer.read(Stuff.class,file); myRestoredStuff.sanityCheck();

  5. 通常使用(de)序列化调整是通过添加/编辑注释来完成的,但是如果你需要做一些粗略的事情,那么支持编写你自己的(de)序列化函数来覆盖标准方法.

  6. 琐碎的语法注释:您需要将已还原对象的类传递给反序列化器(但您不需要转换结果).

  • 我被其他东西分心了,放弃了这个项目. (2认同)

bdo*_*han 8

为什么不使用JAXB呢?

  • 100%架构覆盖率
  • 庞大的用户群
  • 多个实现(如果您遇到一个错误)
  • 包含在Java SE 6中,与JDK 1.5兼容
  • JAX-WS的绑定层(Web服务)
  • JAX-RS(Rest)的绑定层
  • 兼容JSON(与Jettison等库一起使用时)

有用的资源:

  • 另请查看我的博客文章,比较JAXB和简单:http://bdoughan.blogspot.com/2010/10/how-does-jaxb-compare-to-simple.html (3认同)
  • JAXB是最好的,但Android开发人员应该记住,由于缺少包依赖性,您无法使用它.其他人应该使用JAXB. (2认同)

Kev*_*Day 7

我建议你看一下Simple