Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 XStream还是Simple_Java_Xml_Jaxb_Xstream_Pojo - Fatal编程技术网

Java XStream还是Simple

Java XStream还是Simple,java,xml,jaxb,xstream,pojo,Java,Xml,Jaxb,Xstream,Pojo,我需要决定用哪一个。我的情况很简单。我需要将一个简单的POJO/Bean转换为XML,然后再转换回来。没什么特别的 我正在寻找的一件事是,它应该包括父属性以及。最好是它能在超级类型上工作,超级类型可以只是一个标记接口 如果有人能把这两个方面与正反两个方面进行比较,哪一个方面缺少了什么。我知道它也支持JSON,这是一个加号。但如果我们把JSON放在一边,乍一看就简单多了。就发展和社区而言,Simple的未来是什么?我相信XStream是相当流行的,甚至“XStream”这个词也影响了很多人 谢谢。

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

我正在寻找的一件事是,它应该包括父属性以及。最好是它能在超级类型上工作,超级类型可以只是一个标记接口

如果有人能把这两个方面与正反两个方面进行比较,哪一个方面缺少了什么。我知道它也支持JSON,这是一个加号。但如果我们把JSON放在一边,乍一看就简单多了。就发展和社区而言,Simple的未来是什么?我相信XStream是相当流行的,甚至“XStream”这个词也影响了很多人


谢谢。

我建议你看一下

我还建议,看一下,然后自己决定。邮件列表响应速度非常快,任何查询都会得到及时的答复。

到目前为止,我还从未使用过Simple framework


根据我使用Xstream的经验。它在XML上运行良好。然而,对于JSON,当我试图序列化包含哈希表列表的bean时,结果并不像预期的那样精确。

仅仅是阅读文档(我面临着与您相同的问题,但尚未尝试任何一种方法;对此持保留态度):

XSTREAM

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

  • 主页是唯一可靠的信息来源;它列出了大约六篇外部文章,还有一个邮件列表,但是你在互联网上找不到
  • 需要在代码运行之前对其进行注释
  • 对于每个属性,使用属性而不是XML节点可以很容易地生成更紧凑的XML文件
  • 只要类是正确的,但版本不同,就通过在解析中不严格来处理版本控制。(也就是说,如果您添加了两个字段,并从上一个版本中删除了一个字段,它将忽略删除的字段,不会引发异常,但不会设置添加的字段。)与XStream一样,它似乎没有办法将数据从一个版本迁移到下一个版本,但与XStream不同,它没有外部库来介入并处理它。据推测,处理这个问题的方法是使用一些外部函数(可能还有类中的“version”变量),所以您可以这样做

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

  • 常用的(反)序列化调整是通过添加/编辑注释来进行的,但是如果需要做一些粗制滥造的事情,可以编写自己的(反)序列化函数来覆盖标准方法

  • 简单语法注意:您需要将还原对象的类传递到反序列化程序(但不需要强制转换结果)

  • 在阅读stackoverflow时快速浏览simple;作为Paul Marshalls帮助文章的一个修正,我想我应该提到Simple似乎支持通过注释进行版本控制-


    为什么不改用JAXB呢

    • 100%架构覆盖率
    • 庞大的用户群
    • 多个实现(以防在一个实现中遇到错误)
    • 包含在JavaSE6中,与JDK1.5兼容
    • JAX-WS(Web服务)的绑定层
    • JAX-RS的绑定层(Rest)
    • 与JSON兼容(与库(如抛弃)一起使用时)
    有用资源:


    Simple比XStream慢得多(将对象序列化为xml)


    我想在这里分享一下。 要使XStream忽略缺少的字段(当您删除属性时),请执行以下操作:

    这也可以扩展到处理版本和属性重命名


    归功于Peter Voss:

    simple和Jaxb的一个“简单”(双关语)缺点是,它们需要先注释对象,然后才能序列化为XML。如果您很快想用未注释的对象序列化其他人的代码,会发生什么情况?如果有一天您能看到这种情况,那么XStream更适合。(有时,它真的可以归结为这样的简单需求来驱动您的决策)。

    在您的回答后编辑了我的问题。谢谢你介绍另一件事。我在JavaRanct的一个朋友让我意识到中间人的年龄只有2年,而且它只有一个提交人。所以,这对我来说是不可能的。现在,您可能想强调一下简单框架的一些方面,比如它如何更适合我。非常感谢。谢谢你,ng支持这个建议。现在我不需要做JSON的事情。顺便说一下,我尝试了Simple和XStream。两者都给了我想要的结果。但我坚持使用XStream,因为我想它很受欢迎无论如何,谢谢。请查看我的比较JAXB和XStream的博文:也请查看我的比较JAXB和Simple的博文:JAXB是最好的,但是Android开发人员应该记住,由于mis,您不能使用它
     XStream xstream = new XStream() {
      @Override
      protected MapperWrapper wrapMapper(MapperWrapper next) {
        return new MapperWrapper(next) {
          @Override
          public boolean shouldSerializeMember(Class definedIn,
                  String fieldName) {
            if (definedIn == Object.class) {
              return false;
            }
            return super.shouldSerializeMember(definedIn, fieldName);
          }
        };
      }
    };