http://www.cnblogs.com/qlee/archive/2011/07/12/2104089.html http://www.cnblogs.com/shanks/archive/2009/08/23/1552552.html