http://blog.csdn.net/raige/archive/2009/11/28/4893306.aspx http://www.bitscn.com/pdb/java/200904/161182_2.html