https://www.cnblogs.com/answeryi/archive/2011/12/16/2289811.html http://blog.csdn.net/conanswp/article/details/23297441