参考:http://www.cnblogs.com/salam/archive/2011/04/04/2005329.html
http://www.oschina.net/code/snippet_54100_5217