|  |  | 
 |  |  | import com.easysocket.interfaces.conn.IConnectionManager; | 
 |  |  | import com.easysocket.interfaces.conn.ISocketActionDispatch; | 
 |  |  | import com.easysocket.interfaces.io.IReader; | 
 |  |  | import com.easysocket.utils.HexUtil; | 
 |  |  | import com.easysocket.utils.LogUtil; | 
 |  |  | import com.tencent.bugly.crashreport.CrashReport; | 
 |  |  |  | 
 |  |  | import java.io.IOException; | 
 |  |  | import java.io.InputStream; | 
 |  |  | 
 |  |  |                     // 保存body | 
 |  |  |                     originalData.setBodyData(bodyBuf.array()); | 
 |  |  |  | 
 |  |  |                     LogUtil.d("Socket收到数据-->" + originalData.getBodyString()); | 
 |  |  |                     LogUtil.d("Socket收到数据-->" +HexUtil.bytesToHex(originalData.getBodyBytes()) ); | 
 |  |  |                     // 分发数据 | 
 |  |  |                     actionDispatch.dispatchAction(IOAction.ACTION_READ_COMPLETE, originalData); | 
 |  |  |  | 
 |  |  | 
 |  |  |             throw new ReadUnrecoverableException("数据body的长度不能小于0"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         LogUtil.d("Socket收到数据-->" + originalData.getBodyString()); | 
 |  |  |         LogUtil.d("Socket收到数据-->" + HexUtil.bytesToHex(originalData.getBodyBytes())); | 
 |  |  |         // 分发 | 
 |  |  |         actionDispatch.dispatchAction(IOAction.ACTION_READ_COMPLETE, originalData); | 
 |  |  |  | 
 |  |  | 
 |  |  |                 // 停止线程 | 
 |  |  |                 stopThread = true; | 
 |  |  |                 release(); | 
 |  |  |                 LogUtil.i("reader停止线程"); | 
 |  |  |                 CrashReport.postCatchedException(unrecoverableException); | 
 |  |  |             } catch (ReadRecoverableExeption readRecoverableExeption) { | 
 |  |  |                 readRecoverableExeption.printStackTrace(); | 
 |  |  |                 // 重连 | 
 |  |  |                 LogUtil.d("--->重连 ReadRecoverableExeption"); | 
 |  |  |                 connectionManager.disconnect(true); | 
 |  |  |  | 
 |  |  |             } catch (IOException e) { | 
 |  |  |                 e.printStackTrace(); | 
 |  |  |                 // 重连 | 
 |  |  | 
 |  |  |         byte[] data = new byte[len]; | 
 |  |  |         originBuf.get(data, 0, len); | 
 |  |  |         readData.setBodyData(data); | 
 |  |  |         LogUtil.d("Socket收到数据-->" + readData.getBodyString()); | 
 |  |  |         LogUtil.d("Socket收到数据-->" + HexUtil.bytesToHex(readData.getBodyBytes())); | 
 |  |  |         // 分发数据 | 
 |  |  |         actionDispatch.dispatchAction(IOAction.ACTION_READ_COMPLETE, readData); | 
 |  |  |         // 相当于把指针重新指向positon=0 | 
 |  |  | 
 |  |  |  | 
 |  |  |     // 释放资源 | 
 |  |  |     private void release() { | 
 |  |  |         LogUtil.i("reader线程释放资源"); | 
 |  |  |         if (originBuf != null) { | 
 |  |  |             originBuf = null; | 
 |  |  |         } |