不知道为什么博客不能收藏了,只好转载过来。
转载地址:http://blog.csdn.net/earbao/article/details/46914407
- package com.baidu.test;
- import java.io.Serializable;
- import java.util.List;
- import org.msgpack.annotation.MessagePackMessage;
- //Msgpack需要注释
- @MessagePackMessage
- public class Student implements Serializable{
- private static final long serialVersionUID = -2060550357305407661L;
- private Integer id;
- private String name;
- private String city;
- private List<Student> lovers;
- public Student(){}
- public Student(Integer id, String name, String city) {
- super();
- this.id = id;
- this.name = name;
- this.city = city;
- }
- public Student(Integer id, String name, String city, List<Student> lovers) {
- super();
- this.id = id;
- this.name = name;
- this.city = city;
- this.lovers = lovers;
- }
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getCity() {
- return city;
- }
- public void setCity(String city) {
- this.city = city;
- }
- public List<Student> getLovers() {
- return lovers;
- }
- public void setLovers(List<Student> lovers) {
- this.lovers = lovers;
- }
- @Override
- public String toString() {
- return "Student [city=" + city + ", id=" + id + ", lovers=" + lovers
- + ", name=" + name + "]";
- }
- }
- package com.baidu.test.other;
- import java.io.Serializable;
- import java.util.List;
- import org.msgpack.annotation.MessagePackMessage;
- @MessagePackMessage
- public class Teacher implements Serializable{
- private static final long serialVersionUID = -2060550357305407661L;
- private Integer id;
- private String name;
- private String city;
- private List<Teacher> lovers;
- public Teacher(){}
- public Teacher(Integer id, String name, String city) {
- super();
- this.id = id;
- this.name = name;
- this.city = city;
- }
- public Teacher(Integer id, String name, String city, List<Teacher> lovers) {
- super();
- this.id = id;
- this.name = name;
- this.city = city;
- this.lovers = lovers;
- }
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getCity() {
- return city;
- }
- public void setCity(String city) {
- this.city = city;
- }
- public List<Teacher> getLovers() {
- return lovers;
- }
- public void setLovers(List<Teacher> lovers) {
- this.lovers = lovers;
- }
- @Override
- public String toString() {
- return "Teacher [city=" + city + ", id=" + id + ", lovers=" + lovers
- + ", name=" + name + "]";
- }
- }
- package com.baidu.test;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.TypeReference;
- import com.alibaba.fastjson.serializer.SerializerFeature;
- import com.baidu.test.other.Teacher;
- /*
- 一个JSON库涉及的最基本功能就是序列化和反序列化。Fastjson支持java bean的直接序列化。
- 使用com.alibaba.fastjson.JSON这个类进行序列化和反序列化。
- http://blog.csdn.net/yuanjian19900610/article/details/37737087
- */
- public class TestFastJson {
- @SuppressWarnings("unchecked")
- public static void test002() {
- HashMap<String, Object> map = new HashMap<String, Object>();
- map.put("username", "zhangsan");
- map.put("age", 24);
- map.put("sex", "男");
- // map集合
- HashMap<String, Object> temp = new HashMap<String, Object>();
- temp.put("name", "xiaohong");
- temp.put("age", "23");
- map.put("girlInfo", temp);
- // list集合
- List<String> list = new ArrayList<String>();
- list.add("爬山");
- list.add("骑车");
- list.add("旅游");
- map.put("hobby", list);
- /*
- * JSON 序列化,默认序列化出的JSON字符串中键值对是使用双引号,如果需要单引号的JSON字符串, [eg:String
- * jsonString =
- * JSON.toJSONString(map,SerializerFeature.UseSingleQuotes);]
- * fastjson序列化时可以选择的SerializerFeature有十几个属性,你可以按照自己的需要去选择使用。
- */
- String jsonString = JSON.toJSONString(map);
- System.out.println("JSON=" + jsonString);
- // 反序列化
- HashMap<String, Object> map_unserial = JSON.parseObject(jsonString,
- HashMap.class);
- System.out.println(map_unserial);
- }
- public static void main(String[] args) {
- test001();
- test002();
- test003();
- test004();
- }
- // 日期格式化
- public static void test003() {
- Date date = new Date();
- // 输出毫秒值
- System.out.println(JSON.toJSONString(date));
- // 默认格式为yyyy-MM-dd HH:mm:ss
- System.out.println(JSON.toJSONString(date,
- SerializerFeature.WriteDateUseDateFormat));
- // 根据自定义格式输出日期
- System.out.println(JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd",
- SerializerFeature.WriteDateUseDateFormat));
- }
- /** 泛型的反序列化 */
- public static void test004() {
- String json = "{\"user\":{\"city\":\"来自北京\",\"name\":\"zhangsan\",\"id\":25}}";
- Map<String, Student> map = JSON.parseObject(json,
- new TypeReference<Map<String, Student>>() {
- });
- System.out.println(map.get("user"));
- }
- private static void test001() {
- Student studentLover = new Student(11, "name_wjh", "beijing");
- List<Student> lovers = new ArrayList<Student>();
- lovers.add(studentLover);
- lovers.add(new Student(12, "name_wjh", "北京"));
- lovers.add(new Student(13, "name_wjh", "上海"));
- Student student = new Student(1, "name_xx", "南宁", lovers);
- // System.out.println(JSON.toJSONString(student,
- // SerializerFeature.QuoteFieldNames));
- // 序列化
- String result = JSON.toJSONString(student);
- System.out.println(result);
- // 反序列化
- Student student2 = JSON.parseObject(result, Student.class);
- System.out.println(student2);
- // fastjson 强大,可以直接反序列化为其他类,只要属性名对应
- Teacher teacher = JSON.parseObject(result, Teacher.class);
- System.out.println(teacher);
- }
- }
- package com.baidu.test;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import android.util.Base64;
- import com.baidu.test.other.Teacher;
- import com.caucho.hessian.io.HessianInput;
- import com.caucho.hessian.io.HessianOutput;
- /*
- 注意:
- 1. 在Hessian远程调用方法中,客户端中的接口类必须和服务器中的接口类一样,方法名称也一样
- 2. 在接口类中,不要写重构的方法,Hessian不能识别重构的方法。
- 3. 方法参数中,如果有自定义实体对象entity,则有以下几注意点:
- a entity的package名必须同服务器上的package,否则会在服务端上报找不到此类
- b entity必须是可序列化的,如果是组合对象,则可序列化应该可递归下去,除非不需要组合
- 4. 方法返回值中,如果有自定义对象,同2,如果是集合对象,则为List(lists and arrays) & map(maps and dictionaries)
- 5. Hessian 不支持文件传输,如需要文件传输,则传递数据流实现(下一文档说明)
- */
- public class TestHessian {
- public static byte[] serialize(Object obj) throws IOException {
- if (obj == null)
- throw new NullPointerException();
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- HessianOutput ho = new HessianOutput(os);
- ho.writeObject(obj);
- return os.toByteArray();
- }
- public static Object deserialize(byte[] by) throws IOException {
- if (by == null)
- throw new NullPointerException();
- ByteArrayInputStream is = new ByteArrayInputStream(by);
- HessianInput hi = new HessianInput(is);
- return hi.readObject();
- }
- public static void main(String[] args) throws Exception {
- List<Student> students = new ArrayList<Student>();
- students.add(new Student(11, "name_wjh", "北京11"));
- students.add(new Student(12, "name_wjh", "北京"));
- students.add(new Student(13, "name_wjh", "上海"));
- Student myStudent = new Student(10, "xx", "xxx", students);
- System.out.println(myStudent);
- byte[] buffer = serialize(myStudent);
- String str = Base64.encodeToString(buffer, Base64.DEFAULT);
- System.out.println(str);
- Student student = (Student) deserialize(Base64.decode(str,
- Base64.DEFAULT));
- System.out.println(student);
- // 不能转换为其他类
- Teacher teacher = (Teacher) deserialize(Base64.decode(str,
- Base64.DEFAULT));
- System.out.println(teacher);
- }
- }
- package com.baidu.test;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.List;
- import org.codehaus.jackson.map.ObjectMapper;
- import com.baidu.test.other.Teacher;
- //http://blog.csdn.net/subuser/article/details/19127003
- public class TestJackson {
- public static void main(String[] args) throws Exception {
- List<Student> students = new ArrayList<Student>();
- students.add(new Student(11, "name_wjh", "北京11"));
- students.add(new Student(12, "name_wjh", "北京"));
- students.add(new Student(13, "name_wjh", "上海"));
- Student myStudent = new Student(10, "xx", "xxx", students);
- ObjectMapper mapper = new ObjectMapper();
- // convert user object to json string, and save to a file
- mapper.writeValue(new File("user.json"), myStudent);
- // read from file, convert it to user class
- Student student = mapper
- .readValue(new File("user.json"), Student.class);
- System.out.println(student);
- Teacher teacher = mapper
- .readValue(new File("user.json"), Teacher.class);
- System.out.println(teacher);
- //
- String data=mapper.writeValueAsString(myStudent);
- System.out.println(data);
- Student student2=mapper.readValue(data.getBytes(), Student.class);
- System.out.println(student2);
- Teacher teacher2=mapper.readValue(data.getBytes(), Teacher.class);
- System.out.println(teacher2);
- }
- }
- package com.baidu.test;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import com.baidu.test.other.Teacher;
- import net.sf.json.JSONObject;
- import net.sf.json.JsonConfig;
- // http://json-lib.sourceforge.net/
- public class testJsonlib {
- public static void main(String[] args) {
- List<Student> students = new ArrayList<Student>();
- students.add(new Student(11, "name_wjh", "北京11"));
- students.add(new Student(12, "name_wjh", "北京"));
- students.add(new Student(13, "name_wjh", "上海"));
- Student myStudent = new Student(10, "xx", "xxx", students);
- JSONObject js = JSONObject.fromObject(myStudent);
- String str=js.toString();
- System.out.println(str);
- JSONObject jsonObject = JSONObject.fromObject(str);
- /*
- JsonConfig jsonConfig = new JsonConfig();
- jsonConfig.setRootClass(Student.class);
- Map<String, Class> classMap = new HashMap<String, Class>();
- classMap.put("lovers", Student.class); // 指定JsonRpcRequest的request字段的内部类型
- jsonConfig.setClassMap(classMap);
- */
- Student student = (Student) JSONObject.toBean(jsonObject, Student.class);
- System.out.println(student);
- //不好用
- Teacher teacher = (Teacher) JSONObject.toBean(jsonObject, Teacher.class);
- System.out.println(teacher);
- }
- }
- package com.baidu.test;
- import java.util.ArrayList;
- import java.util.List;
- import android.util.Base64;
- import com.baidu.test.other.Teacher;
- import com.esotericsoftware.kryo.Kryo;
- import com.esotericsoftware.kryo.Registration;
- import com.esotericsoftware.kryo.io.Input;
- import com.esotericsoftware.kryo.io.Output;
- public class TestKryo {
- private static void test001() {
- Kryo kryo = new Kryo();
- // kryo.setReferences(true);
- // kryo.setRegistrationRequired(true);
- // kryo.setInstantiatorStrategy(new StdInstantiatorStrategy());
- // 注册类
- Registration registration = kryo.register(Student.class);
- long time = System.currentTimeMillis();
- for (int i = 0; i < 2; i++) {
- // 序列化
- Output output = null;
- // ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- // output = new Output( outStream , 4096);
- output = new Output(1, 4096);
- List<Student> students = new ArrayList<Student>();
- students.add(new Student(11, "name_wjh", "北京11"));
- students.add(new Student(12, "name_wjh", "北京"));
- students.add(new Student(13, "name_wjh", "上海"));
- Student myStudent = new Student(10, "xx", "xxx", students);
- kryo.writeObject(output, myStudent);
- byte[] bb = output.toBytes();
- output.flush();
- String str=Base64.encodeToString(bb, Base64.DEFAULT);
- System.out.println(str);
- // 反序列化
- Input input = new Input(Base64.decode(str, Base64.DEFAULT));
- Student s = (Student) kryo.readObject(input, registration.getType());
- System.out.println(s);
- input.close();
- // 反序列化为其他类
- input = new Input(Base64.decode(str, Base64.DEFAULT));
- Teacher teacher = (Teacher) kryo.readObject(input, Teacher.class);
- System.out.println(teacher);
- input.close();
- }
- time = System.currentTimeMillis() - time;
- System.out.println("time:" + time);
- }
- public static void main(String[] args) throws Exception {
- test001();
- }
- }
- package com.baidu.test;
- import java.util.ArrayList;
- import java.util.List;
- import org.msgpack.MessagePack;
- import com.baidu.test.other.Teacher;
- import android.util.Base64;
- public class TestMsgpack {
- public static void main(String[] args) throws Exception {
- List<Student> students = new ArrayList<Student>();
- students.add(new Student(11, "name_wjh", "北京11"));
- students.add(new Student(12, "name_wjh", "北京"));
- students.add(new Student(13, "name_wjh", "上海"));
- Student myStudent = new Student(10, "xx", "xxx", students);
- // Serialize
- byte[] raw = MessagePack.pack(myStudent);
- String str = Base64.encodeToString(raw, Base64.DEFAULT);
- System.out.println(str);
- // Deserialize
- Student student = MessagePack.unpack(
- Base64.decode(str, Base64.DEFAULT), Student.class);
- System.out.println(student);
- // Deserialize other class
- Teacher teacher = MessagePack.unpack(
- Base64.decode(str, Base64.DEFAULT), Teacher.class);
- System.out.println(teacher);
- }
- }
- package com.baidu.test;
- import java.util.ArrayList;
- import java.util.List;
- import org.msgpack.MessagePack;
- import android.util.Base64;
- import com.github.xsonorg.XSON;
- public class TestXson {
- public static void main(String[] args) {
- List<Student> students = new ArrayList<Student>();
- students.add(new Student(11, "name_wjh", "北京11"));
- students.add(new Student(12, "name_wjh", "北京"));
- students.add(new Student(13, "name_wjh", "上海"));
- Student myStudent = new Student(10, "xx", "xxx", students);
- byte[] buffer=XSON.write(myStudent);
- //失败
- String str = Base64.encodeToString(buffer, Base64.DEFAULT);
- System.out.println(str);
- Student student=XSON.parse(Base64.decode(str, Base64.DEFAULT));
- System.out.println(student);
- }
- }
源码下载:http://download.csdn.net/detail/earbao/8906249