自己写的源码,仅供参考。如果有什么错误还请各路大神指正