http://www.open-open.com/lib/view/open1373981182669.html
http://blog.csdn.net/xyz_lmn/article/details/8132420