package com.dy.testClient.tcpConnect; import org.apache.mina.filter.codec.ProtocolEncoderOutput; import org.apache.mina.filter.codec.ProtocolEncoderAdapter; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; import java.io.*; public class LocalEncoder extends ProtocolEncoderAdapter { /** * 对数据进行编码,以备网络传输 */ public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws IOException, Exception{ MinaData minaData = null ; if(message instanceof Command){ minaData = new MinaData() ; minaData.setCom((Command)message) ; }else{ minaData = (MinaData) message; } byte[] bytes1 = getCommandBytes(minaData.getCom()); byte[] bytes2 = minaData.getAttachment() ; int capacity = (bytes1==null?0:bytes1.length) + (bytes2==null?0:bytes2.length) + 8; IoBuffer buffer = IoBuffer.allocate(capacity, false); buffer.putInt(bytes1.length); buffer.put(bytes1); if(bytes2 == null){ buffer.putInt(0); }else{ buffer.putInt(bytes2.length); buffer.put(bytes2); } buffer.flip(); out.write(buffer); } /** * 将命令转换成字节数组 * @param com * @return * @throws IOException * @throws Exception */ private byte[] getCommandBytes(Command com) throws IOException, Exception { String xml = com.toXml() ; byte[] bytes = xml.getBytes() ; return bytes ; } }