http://www.cnblogs.com/chegan/archive/2009/06/15/1503308.html http://www.cnblogs.com/Hedonister/articles/138920.html