一、各个JSON技术的对比(本部分摘抄自http://www.cnblogs.com/kunpengit/p/4001680.html):

1.json-lib
json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,
包括commons-beanutils-1.7.0.jar,commons-collections-3.2.jar,commons-lang-2.4.jar,commons-logging-1.1.jar,ezmorph-1.0.4.jar,jdom.jar,json-lib-2.2.2-jdk15.jar
对于复杂类型的转换,json-lib对于json转换成bean还有缺陷,比如一个类里面会出现另一个类的list或者map集合,json-lib从json到bean的转换就会出现问题。
json-lib在功能和性能上面都不能满足现在互联网化的需求。
2.开源的Jackson
相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。
而且Jackson社区相对比较活跃,更新速度也比较快。
Jackson对于复杂类型的json转换bean会出现问题,一些集合Map,List的转换出现问题。
Jackson对于复杂类型的bean转换Json,转换的json格式不是标准的Json格式
3.Google的Gson
Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,
但自从在2008年五月公开发布第一版后已被许多公司或用户应用。
Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,只依赖于gson-2.7.jar,能够直接跑在JDK上。
而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。
类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。
Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。
4.阿里巴巴的FastJson
Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。
无依赖,不需要例外额外的jar,只需要fastjson-1.2.8.jar,能够直接跑在JDK上。
FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。
FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。

综上4种Json技术的比较,在项目选型的时候可以使用Google的Gson和阿里巴巴的FastJson两种并行使用,
如果只是功能要求,没有性能要求,可以使用google的Gson,
如果有性能上面的要求可以使用Gson将bean转换json确保数据的正确,使用FastJson将Json转换Bean

二、实例

1.首先建立实体Bean

(1)学生实体类

 package com.model;

 import java.io.Serializable;
import java.util.Date; /**
* @ClassName: Student
* @Description: TODO(学生实体类)
* @author xbq
* @date 2017-2-2 上午9:31:06
*
*/
public class Student implements Serializable{ /**
* @Fields serialVersionUID : TODO(用一句话描述这个变量表示什么)
*/
private static final long serialVersionUID = 1L; private int id;
private String name;
private Date birth;
private String address; public Student() {
super();
} public Student(int id, String name, Date birth, String address) {
super();
this.id = id;
this.name = name;
this.birth = birth;
this.address = address;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", birth=" + birth
+ ", address=" + address + "]";
} }

(2)包含学生List的实体类

 package com.model;

 import java.io.Serializable;
import java.util.List; /**
*
* @ClassName: StudentAnalysis
* @Description: TODO(包含学生 实体类 的List的 实体类)
* @author xbq
* @date 2017-2-2 上午9:31:46
*
*/
public class StudentAnalysis implements Serializable{ /**
* @Fields serialVersionUID : TODO(用一句话描述这个变量表示什么)
*/
private static final long serialVersionUID = 1L;
private List<Student> students; public StudentAnalysis() {
super();
} public StudentAnalysis(List<Student> students) {
super();
this.students = students;
} public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
} @Override
public String toString() {
return "StudentAnalysis [students=" + students + "]";
} }

2.Gson测试类和封装的工具类

(1)测试类

 package com.gson.test;

 import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.junit.Test; import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.model.Student;
import com.model.StudentAnalysis; /**
* @ClassName: TestGson
* @Description: TODO(这里用一句话描述这个类的作用)
* @author xbq
* @date 2017-2-2 上午9:37:46
* Gson将 实体中的 Timestamp 类型 在 json中转化为 Feb 2, 2017 9:36:41 AM 形式
* Date 类型 在 json中转化为 Feb 2, 2017 9:36:41 AM 形式
*/
public class TestGson { /**
* @Title: testObjectToJson
* @Description: TODO(对象转Json)
* @param 设定文件
* @return void 返回类型
* @throws
*/
@Test
public void testObjectToJson(){
Gson gson = new GsonBuilder().serializeNulls().create(); // 这样实例化 会将 实体中空的属性 在 json中显示为 null
Student student = new Student(10,"张三",new Date(),null);
String json = gson.toJson(student);
System.out.println("json==" + json); List<Student> list = new ArrayList<Student>();
student = new Student(1,"张三",new Date(),null);
list.add(student);
student = new Student(2,"李四",new Date(),null);
list.add(student);
student = new Student(3,"王五",null,"山东");
list.add(student);
StudentAnalysis analysis = new StudentAnalysis(list);
String studentsJson = gson.toJson(analysis);
System.out.println("json==" + studentsJson); } @Test
public void jsonToObject(){
Gson gson = new GsonBuilder().serializeNulls().create();
String stuJson = "{\"id\":10,\"name\":\"张三\",\"birth\":\"Feb 2, 2017 9:46:39 AM\",\"createDate\":\"Feb 2, 2017 9:46:39 AM\",\"address\":null}";
Student stu = gson.fromJson(stuJson, Student.class);
System.out.println("student==" + stu); String stuListJson = "{\"students\":[{\"id\":1,\"name\":\"张三\",\"birth\":\"Feb 2, 2017 9:46:39 AM\",\"createDate\":\"Feb 2, 2017 9:46:39 AM\",\"address\":null},{\"id\":2,\"name\":\"李四\",\"birth\":\"Feb 2, 2017 9:46:39 AM\",\"createDate\":null,\"address\":null},{\"id\":3,\"name\":\"王五\",\"birth\":null,\"createDate\":\"Feb 2, 2017 9:46:39 AM\",\"address\":\"山东\"}]}";
StudentAnalysis analysis = gson.fromJson(stuListJson, StudentAnalysis.class);
System.out.println("studentList==" + analysis); // 遍历List
for(Student s : analysis.getStudents()){
System.out.println(s);
} String studentsJson = gson.toJson(analysis);
System.out.println("json==" + studentsJson); } @Test
public void ListToJson(){
Gson gson = new GsonBuilder().serializeNulls().create(); List<Student> list = new ArrayList<Student>();
Student student = new Student(1,"张三",new Date(),null);
list.add(student);
student = new Student(2,"李四",new Date(),null);
list.add(student);
student = new Student(3,"王五",null,"山东");
list.add(student);
// list 转为 json
String json = gson.toJson(list);
System.out.println(json); // json转为 List
List<Student> students = gson.fromJson(json, new TypeToken<List<Student>>(){}.getType());
System.out.println(students);
} @Test
public void MapToJson(){
Gson gson = new GsonBuilder().serializeNulls().create(); Map<String,List<Student>> map = new HashMap<String,List<Student>>();
List<Student> list1 = new ArrayList<Student>();
Student student = new Student(1,"张三",new Date(),null);
list1.add(student);
student = new Student(2,"李四",new Date(),null);
list1.add(student);
student = new Student(3,"王五",null,"山东");
list1.add(student); List<Student> list2 = new ArrayList<Student>();
student = new Student(4,"张三2",new Date(),null);
list2.add(student);
student = new Student(5,"李四2",new Date(),null);
list2.add(student);
student = new Student(6,"王五2",null,"山东");
list2.add(student); List<Student> list3 = new ArrayList<Student>();
student = new Student(7,"张三2",new Date(),null);
list3.add(student);
student = new Student(8,"李四2",new Date(),null);
list3.add(student);
student = new Student(9,"王五2",null,"山东");
list3.add(student); map.put("list1", list1);
map.put("list2", list2);
map.put("list3", list3); // map转为 json
String json = gson.toJson(map);
System.out.println(json); // json转为map
map = gson.fromJson(json, new TypeToken<HashMap<String,List<Student>>>(){}.getType());
System.out.println(map);
} }

(2)工具类(在项目中可以直接使用)

 package com.gson.util;

 import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.model.Student;
import com.model.StudentAnalysis; /**
* @ClassName: GsonUtil
* @Description: TODO(这里用一句话描述这个类的作用)
* @author xbq
* @date 2017-2-2 下午12:42:59
*Gson将 实体中的 Timestamp 类型 在 json中转化为 Feb 2, 2017 9:36:41 AM 形式
* Date 类型 在 json中转化为 Feb 2, 2017 9:36:41 AM 形式
*/
public class GsonUtil { private static Gson gson = null; static {
gson = new GsonBuilder().serializeNulls().create(); // 这样实例化 会将 实体中空的属性 在 json中显示为 null
} /**
* @Title: objectToJson
* @Description: TODO(实体类、List、Map 转为 Json)
* @param @param obj
* @param @return 设定文件
* @return String 返回类型
* @throws
*/
public static String objectToJson(Object obj){
return gson.toJson(obj);
} /**
* @Title: jsonToObject
* @Description: TODO(Json转化为实体类 或 List、Map)
* @param @param json
* @param @param type
* @param @return 设定文件
* @return Object 返回类型
* @throws
*/
public static Object jsonToObject(String json,Type type){
if(type instanceof List){
return gson.fromJson(json, new TypeToken<List<Type>>(){}.getType());
}else if(type instanceof Map){
return gson.fromJson(json, new TypeToken<HashMap<String,List<Type>>>(){}.getType());
}else {
return gson.fromJson(json, type);
}
} /**
* 测试
* @Title: main
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param @param args 设定文件
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
Student student = new Student(10,"张三",new Date(),null);
String json = objectToJson(student);
System.out.println("---1---学生Student实体转为的Json------");
System.out.println(json); List<Student> list = new ArrayList<Student>();
student = new Student(1,"张三",new Date(),null);
list.add(student);
student = new Student(2,"李四",new Date(),null);
list.add(student);
student = new Student(3,"王五",null,"山东");
list.add(student);
StudentAnalysis analysis = new StudentAnalysis(list);
String studentsJson = objectToJson(analysis);
System.out.println("---2----学生StudentAnalysis实体转为的Json------");
System.out.println(studentsJson); String stuJson = "{\"id\":10,\"name\":\"张三\",\"birth\":\"Feb 2, 2017 9:46:39 AM\",\"address\":null}";
Student stu = (Student) jsonToObject(stuJson, Student.class);
System.out.println("---3----学生Json转化为Student实体-------");
System.out.println(stu); String stuListJson = "{\"students\":[{\"id\":1,\"name\":\"张三\",\"birth\":\"Feb 2, 2017 9:46:39 AM\",\"address\":null},{\"id\":2,\"name\":\"李四\",\"birth\":\"Feb 2, 2017 9:46:39 AM\",\"createDate\":null,\"address\":null},{\"id\":3,\"name\":\"王五\",\"birth\":null,\"createDate\":\"Feb 2, 2017 9:46:39 AM\",\"address\":\"山东\"}]}";
StudentAnalysis analysis1 = (StudentAnalysis) jsonToObject(stuListJson, StudentAnalysis.class);
System.out.println("---4----学生analysis1转化为StudentAnalysis实体-------");
System.out.println(analysis1); System.out.println("---5----遍历学生List--------");
// 遍历List
for(Student s : analysis1.getStudents()){
System.out.println(s);
} }
}

3.FastJson测试类和封装的工具类

(1)测试类

 package com.fastjson.test;

 import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.junit.Test; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.model.Student;
import com.model.StudentAnalysis; /**
* fastjson 将 Date 和 Timestamp 类型的 转化为 long的形式
* @ClassName: TestFastJson
* @Description: TODO(这里用一句话描述这个类的作用)
* @author xbq
* @date 2017-2-2 下午2:00:27
*
*/
public class TestFastJson { @Test
public void ObjectToJson(){
Student student = new Student(10,"张三",new Date(),null);
// 缺省情况下FastJSON不输入为值Null的字段,可以使用SerializerFeature.WriteMapNullValue使其输出
String json = JSON.toJSONString(student,SerializerFeature.WriteMapNullValue);
System.out.println(json); List<Student> list = new ArrayList<Student>();
student = new Student(1,"张三",new Date(),null);
list.add(student);
student = new Student(2,"李四",new Date(),null);
list.add(student);
student = new Student(3,"王五",null,"山东");
list.add(student);
StudentAnalysis analysis = new StudentAnalysis(list);
json = JSON.toJSONString(analysis,SerializerFeature.WriteMapNullValue);
System.out.println(json);
} @Test
public void jsonToObject(){
String json = "{\"address\":null,\"birth\":1486015195815,\"createDate\":1486015195815,\"id\":10,\"name\":\"张三\"}";
Student student = JSON.parseObject(json,Student.class);
System.out.println(student); json = "{\"students\":[{\"address\":null,\"birth\":1486015524472,\"createDate\":1486015524472,\"id\":1,\"name\":\"张三\"},{\"address\":null,\"birth\":1486015524472,\"createDate\":null,\"id\":2,\"name\":\"李四\"},{\"address\":\"山东\",\"birth\":null,\"createDate\":1486015524472,\"id\":3,\"name\":\"王五\"}]}";
StudentAnalysis analysis = JSON.parseObject(json,StudentAnalysis.class);
System.out.println(analysis);
} @Test
public void ListToJson(){
List<Student> list = new ArrayList<Student>();
Student student = new Student(1,"张三",new Date(),null);
list.add(student);
student = new Student(2,"李四",new Date(),null);
list.add(student);
student = new Student(3,"王五",null,"山东");
list.add(student); // list转化为 json 数组
String json = JSON.toJSONString(list,SerializerFeature.WriteMapNullValue);
System.out.println(json); // json数组转为 list
List<Student> list1 = JSON.parseArray(json, Student.class);
System.out.println(list1);
} @Test
public void MapToJson(){
Map<String,List<Student>> map = new HashMap<String,List<Student>>();
List<Student> list1 = new ArrayList<Student>();
Student student = new Student(1,"张三",new Date(),null);
list1.add(student);
student = new Student(2,"李四",new Date(),null);
list1.add(student);
student = new Student(3,"王五",null,"山东");
list1.add(student); List<Student> list2 = new ArrayList<Student>();
student = new Student(4,"张三2",new Date(),null);
list2.add(student);
student = new Student(5,"李四2",new Date(),null);
list2.add(student);
student = new Student(6,"王五2",null,"山东");
list2.add(student); List<Student> list3 = new ArrayList<Student>();
student = new Student(7,"张三2",new Date(),null);
list3.add(student);
student = new Student(8,"李四2",new Date(),null);
list3.add(student);
student = new Student(9,"王五2",null,"山东");
list3.add(student); map.put("list1", list1);
map.put("list2", list2);
map.put("list3", list3); // map 转为 json
String json = JSON.toJSONString(map,SerializerFeature.WriteMapNullValue);
System.out.println(json); // json转为map
map = JSON.parseObject(json,new TypeReference<Map<String,List<Student>>>(){} );
System.out.println(map);
}
}

(2)工具类(在项目中可以直接使用)

 package com.fastjson.util;

 import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
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.model.Student; /**
* @ClassName: FastJsonUtil
* @Description: TODO(FastJson工具类)
* @author xbq
* @date 2017-2-2 下午6:25:08
*
*/
public class FastJsonUtil { /**
* @Title: objectToJson
* @Description: TODO(实体类、List、Map转化为 json)
* @param @param obj
* @param @return 设定文件
* @return String 返回类型
* @throws
*/
public static String objectToJson(Object obj){
// 缺省情况下FastJSON不输入为值Null的字段,可以使用SerializerFeature.WriteMapNullValue使其输出
return JSON.toJSONString(obj, SerializerFeature.WriteMapNullValue);
} /**
* @Title: jsonToObject
* @Description: TODO(json转化为实体)
* @param @param json
* @param @param type
* @param @return 设定文件
* @return Object 返回类型
* @throws
*/
public static Object jsonToObject(String json,Type type){
return JSON.parseObject(json, type);
} /**
* @Title: jsonToList
* @Description: TODO(json转化为List)
* @param @param json
* @param @param obj 若传 Student的时候,则 传参数 new Student()
* @param @return 设定文件
* @return Object 返回类型
* @throws
*/
@SuppressWarnings("rawtypes")
public static List jsonToList(String json,Object obj){
return JSON.parseArray(json, obj.getClass());
} /**
* @Title: jsonToMap
* @Description: TODO(json转化为Map)
* @param @param json
* @param @param type
* @param @return 设定文件
* @return Object 返回类型
* @throws
*/
@SuppressWarnings("rawtypes")
public static Map jsonToMap(String json,Type type){
return JSON.parseObject(json,new TypeReference<Map<String,List>>(){});
} // 测试
public static void main(String[] args) { List<Student> list = new ArrayList<Student>();
Student student = new Student(1,"张三",new Date(),null);
list.add(student);
student = new Student(2,"李四",new Date(),null);
list.add(student);
student = new Student(3,"王五",null,"山东");
list.add(student); // list转化为 json 数组
String json = objectToJson(list);
System.out.println(json); // json数组转为 list
@SuppressWarnings("unchecked")
List<Student> list1 = jsonToList(json, new Student());
System.out.println(list1);
}
}

4.Json-lib测试类

(1)测试类

 package com.jsonlib.test;

 import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor; import org.junit.Test; import com.model.Student; public class TestJson_lib { // 对象转为json
@Test
public void ObjectToJson(){
Student student = new Student(10,"张三",new Date(),null); JsonConfig config=new JsonConfig();
//设置 json转换的处理器用来处理日期类型
//凡是反序列化Date类型的对象,都会经过该处理器进行处理
config.registerJsonValueProcessor(Date.class, new JsonValueProcessor() {
//参数1 :属性名参数2:json对象的值参数3:jsonConfig对象
public Object processObjectValue(String arg0, Object arg1,JsonConfig arg2) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = (Date) arg1;
return sdf.format(d);
}
public Object processArrayValue(Object arg0, JsonConfig arg1) {
return null;
}
}); JSONObject jsonObject = JSONObject.fromObject(student,config);
System.out.println(jsonObject.toString());
} // json转为对象
@Test
public void JsonToObject(){
String json = "{\"address\":\"\",\"birth\":\"2017-02-02 16:14:42\",\"id\":10,\"name\":\"张三\"}";
JsonConfig config=new JsonConfig();
//设置 json转换的处理器用来处理日期类型
//凡是反序列化Date类型的对象,都会经过该处理器进行处理
config.registerJsonValueProcessor(Date.class, new JsonValueProcessor() {
//参数1 :属性名参数2:json对象的值参数3:jsonConfig对象
public Object processObjectValue(String arg0, Object arg1,JsonConfig arg2) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = (Date) arg1;
return sdf.format(d);
}
public Object processArrayValue(Object arg0, JsonConfig arg1) {
return null;
}
});
Student student = (Student) JSONObject.toBean(JSONObject.fromObject(json,config), Student.class);
System.out.println(student);
} @SuppressWarnings({ "deprecation", "unchecked" })
@Test
public void ListToJson(){
List<Student> list = new ArrayList<Student>();
Student student = new Student(1,"张三",new Date(),null);
list.add(student);
student = new Student(2,"李四",new Date(),null);
list.add(student);
student = new Student(3,"王五",null,"山东");
list.add(student); // list转json
JSONArray jsonArray = JSONArray.fromObject(list);
System.out.println(jsonArray); // json转为list
list = JSONArray.toList(JSONArray.fromObject(jsonArray.toString()),Student.class);
System.out.println(list); // 遍历list
for(Student s : list){
System.out.println(s);
}
} }

三、源码下载

源码中包含实例与jar包----- http://download.csdn.net/detail/u010821757/9746160

Gson、FastJson、json-lib对比与实例的更多相关文章

  1. Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

    Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...

  2. 各个JSON技术的比较(Jackson,Gson,Fastjson)的对比

    JSON技术的调研报告 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包, 包括 ...

  3. Google Gson解析Json数据应用实例

    转自:http://lixigao449778967.blog.163.com/blog/static/24985164201269105928783/ 1.需要的Jar包 1) Google Gso ...

  4. Android JSON,Gson,fastjson实现比较

    activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...

  5. Json,Gson,FastJson解析笔记

    Json,Gson,FastJson解析笔记 1.将JavaBean转换成Json对象: public static String CreatJsonFromObject(Object key,Obj ...

  6. FastJson和Gson和Json数据解析分析和用法

    首先分析下目前号称最快的FastJson,这个是所有人都验证过的,解析速度确实比较快,不过也需要根据数据量来看,数据量小的时候,Gson性能要稍微优于FastJson,但在数据量大解析的情况下,Fas ...

  7. [转] 各种Json解析工具比较 - json-lib/Jackson/Gson/FastJson

    JSON技术的调研报告 一 .各个JSON技术的简介和优劣1.json-libjson-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,包括com ...

  8. JAVA使用Gson解析json数据,实例

    封装类Attribute: public class Attribute { private int id; private String name; private int age; public ...

  9. Android网络之数据解析----使用Google Gson解析Json数据

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

随机推荐

  1. 配置Tomcat的server.xml以适应web-content文件系统的位置改变

    刚才把写的一对jsp.html文件夹改变了位置,然后测试的时候出现了404 后来思考,应该去重新配置tomcat的server.xml文件,修改虚拟路径对应的文件系统路径,修改为当前对应的文件系统路径 ...

  2. java 多线程9 : synchronized锁机制 之 代码块锁

    synchronized同步代码块 用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个较长时间的任务,那么B线程必须等待比较长的时间.这种情况下可以尝试使用 ...

  3. tomcat 启动自动加载外部项目

    conf/server.xml 配置 <!--<Context path="/upload" docBase="E://upload" />- ...

  4. 基于css3炫酷页面加载动画特效代码

    基于CSS3实现35个动画SVG图标.这是一款基于jQuery+CSS3实现的SVG图标动画代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class=&qu ...

  5. 【C#】Event事件的订阅和发布

    学习笔记:学习了委托和事件的用法.事件是一种特殊的委托,记录下事件从订阅到发布的流程. 学习资料源于视频:http://www.maiziedu.com/course/510-6891/ 新建一个De ...

  6. hdu2896 病毒侵袭 AC自动机入门题 N(N <= 500)个长度不大于200的模式串(保证所有的模式串都不相同), M(M <= 1000)个长度不大于10000的待匹配串,问待匹配串中有哪几个模式串,

    /** 题目:hdu2896 病毒侵袭 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2896 题意:N(N <= 500)个长度不大于200的模式串 ...

  7. java-数据库连接工具类 DataSourceUtil.java

    DataSourceUtil.java package com.gordon.utils; import java.sql.Connection; import java.sql.ResultSet; ...

  8. js学习笔记17----元素的各种位置,尺寸

    1. offsetLeft[Top] 当前元素到定位父级(即offsetParent)的距离(偏移值 ). 父级没有定位: offsetParent -> body offsetLeft[Top ...

  9. [随想感悟] 面试时,问哪些问题能试出一个 Android 应用开发者真正的水平?【转自知乎】

    这几年面过的各种Android开发也有三位数了,failed的不敢说,pass的基本都没有看走眼,来得晚了也想说说我的体会. 一般面试时间短则30分钟,多则1个小时,这么点时间要全面考察一个人难度很大 ...

  10. 关于VS2013常用到的快捷键

    版本一 VS2013常用快捷键: 1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键“Ctrl + -”: 2)前进到下一个光标位置:“Ctrl + Shift + - ...