快速FAST (比其它任何基于Java的解析器和生成器更

作者: 操作系统  发布:2019-09-07

9159金沙官网,fastjson 是三个属性很好的 Java 语言完毕的 JSON 深入分析器和生成器,来自阿里Baba(Alibaba)的工程师开垦。

法斯特json是叁脾性质很好的Java语言达成的Json剖判器和生成器,由来自阿里Baba(Alibaba)的程序员开采。具备十分的快的性质,超越其余其余的Java Json Parser。

 

Gson 和 Fast-json的特点

Json的简介
JSON(JavaScript Object Notation) 是一种轻量级的数据互换格式。用于数据调换传输,通用于PHP,Java,c ,Python等编程语言数据交流传输。
易于人阅读和编排,同临时候也易于机器的分析和变化。
骨干协会:对象和数组。

着重特色:

特色: 1、连忙(比别的任何基于Java的深入分析器和生成器更加快,蕴含杰克逊)

在此以前在项目中连串化是用thrift,品质一般,而且供给用编写翻译器生成新的类,在系列化和反类别化的时候认为很麻烦,由此想转到json阵营。比较了jackson,gson等框架之后,决定用fastjson,为啥吧,因为看名字感到一点也不慢。。。

Gson的简要介绍和特征

Gson是google提供的用来在java对象和JSON数据里面实行映射的java类库。能够将一个JSON字符转成多个java对象,恐怕反过来。

  • 快速、高效
  • 代码量少、简洁
  • 面向对象
  • 多少传递和深入分析方便
  • 急迅FAST (比别的任何基于Java的剖判器和生成器更加快,包罗jackson)
  • 强大(援助普通JDK类包罗大肆Java Bean Class、Collection、Map、Date或enum)
  • 零依赖(未有重视另外任何类库除了JDK)

     2、庞大(帮忙一般JDK类满含任意Java Bean Class、Collection、Map、Data或enum)

英特网的布道:

法斯特-json的简单介绍和特点

法斯特json 是贰本性质很好的java语言完成的Json深入分析器和生成器,来自Alibaba的程序猿开拓。具备非常的慢的质量,超越任别的的java json parser 。

  • 立即FAST(比别的任何基于java的分析器和生成器更加快,包括jsckson)
  • 强硬(扶助不一样JDK类富含大肆Java Bean Class、Collection、Map、Data或enum)
  • 零注重(未有借助其他任何类库除了JDK)
  • 扶助注解、补助全类型类别化

亲自过问代码:

             3、零注重(未有借助别的任何类库,除JDK)

fastjson 是两特性质很好的 Java 语言完成的 JSON 分析器和生成器,来自阿里Baba(Alibaba)的技术员开拓。
最重要特色:
迅猛FAST (比任何任何基于Java的分析器和生成器更快,包罗jackson) 庞大(协理一般JDK类包含猖獗Java Bean Class、Collection、Map、Date或enum) 零正视(未有借助别的任何类库除了JDK)

Gson基本用法

import com.alibaba.fastjson.JSON;

Group group = new Group();
group.setId(0L);
group.setName("admin");

User guestUser = new User();
guestUser.setId(2L);
guestUser.setName("guest");

User rootUser = new User();
rootUser.setId(3L);
rootUser.setName("root");

group.getUsers().add(guestUser);
group.getUsers().add(rootUser);

String jsonString = JSON.toJSONString(group);

System.out.println(jsonString);

     4、协助申明、援救全类型系列化

唯独测量检验的结果让作者猛跌近视镜。

主导用法:

  • 概念实体类
  • 依据必要能够将JSON生成单个实体只怕列表实体集合。

9159金沙官网 1

中央选取办法:

Test Case: 对二个User类(空)的靶子分别用java和fastjson系列化一千次,再反连串化1000次,总结时间。注: 测验不是可怜谦虚严谨,只是做个大约的比较。

代码演示

  • 使用GSON解析jsonobject
  • 使用gosn解析jsonarray
  • 利用gson将实体转化为json数据

首先必得导入 gson.jar包

Gson gson = new Gson();
/*Book 类为你自己定义的获取到的网络内容对应的标签类,result为返回的网络内容,*/
Book book = gson.formJson(result,Book.Class);

如上就能够透过

/*可以通过book类拿到对应的标签内容*/ 
Stting title = book.getTitle();

1、创建android工程,引入fastjson-1.2.5.jar(可以在这里下载)

Test Result: 

法斯特-json的着力用法

2、在AndroidManifest.xml加多网络权限:

Type = java Serialize cost = 27ms Deserialize cost = 75ms
Type = fastjson Serialize cost = 385ms Deserialize cost = 84ms

主导用法

  • 概念实体类
  • 依赖供给着意将json生产单个实体或列表实体集结
<uses-permission android:name="android.permission.INTERNET"/>

那是在逗作者吗。。。

代码演示

  • 使用fast-json解析jsonobject
  • 使用fastjson解析jsonarray
  • 动用fastjson酱实体转化为son数据

率先必得导入 fastjson-1.2.5.jar包

/*使用很简单,定一个实体类用于接受jsonobject数据,然后直接调用fastjson方法获取网络返回数据result的内容*/
Book book = JSON.parseObject(result,Book.class)

3、成立实体类:

经过同事提示,看了源码开采fastjson在连串化时必要初始化SerializeConfig,反系列化时索要初阶化ParserConfig。然后笔者在测量检验案例中参预这两句

Book类:

public static ParserConfig pc = new ParserConfig();
public static SerializeConfig sc = new SerializeConfig();
package com.example.bean;

import java.util.ArrayList;

public class Book
{
    private String title;//标题
    private String publisher;//出版社
    private String summary;//概要
    private ArrayList<Tag> tags;

    public String getTitle()
    {
        return title;
    }
    public void setTitle(String title)
    {
        this.title = title;
    }
    public String getPublisher()
    {
        return publisher;
    }
    public void setPublisher(String publisher)
    {
        this.publisher = publisher;
    }
    public String getSummary()
    {
        return summary;
    }
    public void setSummary(String summary)
    {
        this.summary = summary;
    }
    public ArrayList<Tag> getTags()
    {
        return tags;
    }
    public void setTags(ArrayList<Tag> tags)
    {
        this.tags = tags;
    }

}

果不其然快了成都百货上千,但仍旧救经引足

实体类Tag:

Type = fastjson Serialize cost = 36ms Deserialize cost = 42ms

package com.example.bean;

public class Tag
{
    private String count;
    private String name;
    private String title;

    public String getCount()
    {
        return count;
    }
    public void setCount(String count)
    {
        this.count = count;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
    public String getTitle()
    {
        return title;
    }
    public void setTitle(String title)
    {
        this.title = title;
    }

}

再持续看,发掘还供给开首化writer和parser,所以改成那句

4、互联网必要数据和剖判Json:

JSON.parseObject(JSON.toJSONString(new User()), User.class);
package com.example.gsondemo;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.widget.Toast;

import com.alibaba.fastjson.JSON;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.bean.Book;

public class MainActivity extends ActionBarActivity
{
    //请求接口
    private String url = "https://api.douban.com/v2/book/1220562";

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getData();
    }

    /**
     * 获取网络数据
     */
    private void getData()
    {
        //创建请求对象
        StringRequest request = new StringRequest(url, new Listener<String>() {

            @Override
            public void onResponse(String response)
            {
                Log.e("info", response);
                dealData(response);
            }
        }, new ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error)
            {
                Toast.makeText(MainActivity.this, "网络请求出错", Toast.LENGTH_SHORT).show();
            }
        });
        //把请求对象加入请求队列里面
        new Volley().newRequestQueue(getApplicationContext()).add(request);
    }

    /**
     * 进行fastjson解析
     * @param result
     */
    public void dealData(String result){
        //把json字符串转化为实例对象
        Book book = JSON.parseObject(result, Book.class);
        Toast.makeText(MainActivity.this, "标题:"   book.getTitle()   "  出版社:"   book.getPublisher()
                  "   Tag:"   book.getTags().size(), 1).show();
    }
}

结果就很满足了

Type = fastjson Serialize cost = 15ms Deserialize cost = 18ms

敲定: 倘诺您利用fastjson在四个短进度,换句话说只是微量的进展体系化反种类化,那么fastjson由于初叶化须要的时刻比较长,总体品质将会相当差。即使一定要用,有不可或缺的话能够设想手动举行初阶化。

另,补上测量试验代码:

class User implements Serializable {
    private static final long serialVersionUID = -2513747641863637392L;

    User() {
    }
}

public class Test {
//    public static ParserConfig pc = new ParserConfig();
//    public static SerializeConfig sc = new SerializeConfig();

    public static void main(String[] args) throws UnknownHostException {
//        JSON.parseObject(JSON.toJSONString(new User()), User.class);
        String type = "json";
        System.out.println("Type = "   type);
        long start = new Date().getTime();
        byte[] b = serialize(new User(), type);
        long mid = new Date().getTime();
        System.out.println("Serialize cost = "   (mid - start));
        deserialize(b, type);
        System.out.println("Deserialize cost = "   (new Date().getTime() - mid));
    }

    public static byte[] serialize(User user, String type) {
        byte[] b = null;
        for (int i = 0; i < 1000; i  ) {
            if ("java".equalsIgnoreCase(type)) {
                b = javaSerialize(user);
            } else if ("json".equalsIgnoreCase(type)) {
                b = jsonSerialize(user);
            }
        }
        return b;
    }

    public static User deserialize(byte[] b, String type) {
        User user = null;
        for (int i = 0; i < 1000; i  ) {
            if ("java".equalsIgnoreCase(type)) {
                user = javaDeserialize(b);
            } else if ("json".equalsIgnoreCase(type)) {
                user = jsonDeserialize(b);
            }
        }
        return user;
    }

    public static byte[] jsonSerialize(User user) {
        return JSON.toJSONString(user).getBytes();
    }

    public static User jsonDeserialize(byte[] b) {
        return JSON.parseObject(new String(b), User.class);
    }

    public static byte[] javaSerialize(User user) {
        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ObjectOutputStream os = new ObjectOutputStream(out);
            os.writeObject(user);
            return out.toByteArray();
        } catch (Exception e) {
            throw new SerializationException(e);
        }
    }

    public static User javaDeserialize(byte[] b) {
        try {
            ByteArrayInputStream in = new ByteArrayInputStream(b);
            ObjectInputStream is = new ObjectInputStream(in);
            return (User) is.readObject();
        } catch (Exception e) {
            throw new SerializationException(e);
        }
    }
}

 

 

本文由9159.com发布于操作系统,转载请注明出处:快速FAST (比其它任何基于Java的解析器和生成器更

关键词: 9159.com 9159金沙官网