// Path: src/main/java/com/baidu/unbiz/multiengine/codec/HeadCodec.java
// public interface HeadCodec extends MsgCodec {
//     /**
//      * 反序列化
//      *
//      * @param clazz 反序列化后的类定义
//      * @param bytes 字节码
//      *
//      * @return 反序列化后的对象
//      *
//      * @throws CodecException
//      */
//     <T> T decode(Class<T> clazz, byte[] bytes) throws CodecException;
// 
//     /**
//      * 序列化
//      *
//      * @param object 待序列化的对象
//      *
//      * @return 字节码
//      *
//      * @throws CodecException
//      */
//     <T> byte[] encode(T object) throws CodecException;
// 
//     /**
//      * head的类型
//      *
//      * @return
//      */
//     Class getHeadClass();
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/exception/CodecException.java
// public class CodecException extends RuntimeException {
// 
//     /**
//      * serialVersionUID
//      */
//     private static final long serialVersionUID = 5196421433506179782L;
// 
//     /**
//      * Creates a new instance of CodecException.
//      */
//     public CodecException() {
//         super();
//     }
// 
//     /**
//      * Creates a new instance of CodecException.
//      * 
//      * @param arg0
//      * @param arg1
//      */
//     public CodecException(String arg0, Throwable arg1) {
//         super(arg0, arg1);
//     }
// 
//     /**
//      * Creates a new instance of CodecException.
//      * 
//      * @param arg0
//      */
//     public CodecException(String arg0) {
//         super(arg0);
//     }
// 
//     /**
//      * Creates a new instance of CodecException.
//      * 
//      * @param arg0
//      */
//     public CodecException(Throwable arg0) {
//         super(arg0);
//     }
// 
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/transport/protocol/MsgHead.java
// public final class MsgHead {
// 
//     /**
//      * session内顺序Id
//      */
//     private long seqId;
// 
//     /**
//      * int (4) 当前包的数据长度
//      */
//     private int bodyLen;
// 
//     public static final int SIZE = 12;
// 
//     private static String DEF_ENCODING = "GBK";
// 
//     private MsgHead() {
// 
//     }
// 
//     private MsgHead(long seqId, int bodyLen) {
//         this.seqId = seqId;
//         this.bodyLen = bodyLen;
//     }
// 
//     public static MsgHead create() {
//         return new MsgHead();
//     }
// 
//     public static MsgHead create(long seqId) {
//         MsgHead head = new MsgHead();
//         head.setSeqId(seqId);
//         return head;
//     }
// 
//     /**
//      * write pack_head to transport
//      */
//     public byte[] toBytes() {
//         ByteBuffer bb = ByteBuffer.allocate(SIZE);
//         bb.order(ByteOrder.LITTLE_ENDIAN);
// 
//         try {
//             bb.putLong(seqId);
//             bb.putInt(bodyLen);
//         } catch (Exception e) {
//             throw new RuntimeException("exception when putting bytes for nshead...", e);
//         }
//         return bb.array();
//     }
// 
//     /**
//      * 由byte数组解析成PackHead对象
//      */
//     public static MsgHead fromBytes(byte[] headBytes) {
//         MsgHead head = new MsgHead();
//         if (headBytes.length < MsgHead.SIZE) {
//             throw new RuntimeException("NSHead's size should equal 16.");
//         }
//         ByteBuffer buffer = ByteBuffer.wrap(headBytes);
//         buffer.order(ByteOrder.LITTLE_ENDIAN);
//         head.seqId = buffer.getLong();
//         head.bodyLen = buffer.getInt();
//         return head;
//     }
// 
//     public long getSeqId() {
//         return seqId;
//     }
// 
//     public void setSeqId(long seqId) {
//         this.seqId = seqId;
//     }
// 
//     public int getBodyLen() {
//         return bodyLen;
//     }
// 
//     public void setBodyLen(int bodyLen) {
//         this.bodyLen = bodyLen;
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
//     }
// }


import com.baidu.unbiz.multiengine.codec.HeadCodec;
import com.baidu.unbiz.multiengine.exception.CodecException;
import com.baidu.unbiz.multiengine.transport.protocol.MsgHead;
package com.baidu.unbiz.multiengine.codec.common;


/**
 * ClassName: ProtobufCodec <br/>
 * Function: protobuf序列化器，利用反射缓存<tt>method</tt>来进行调用
 */
public class MsgHeadCodec implements HeadCodec {

    @Override
    public <T> T decode(final Class<T> clazz, byte[] data) throws CodecException {
// Path: src/main/java/com/baidu/unbiz/multiengine/codec/HeadCodec.java
// public interface HeadCodec extends MsgCodec {
//     /**
//      * 反序列化
//      *
//      * @param clazz 反序列化后的类定义
//      * @param bytes 字节码
//      *
//      * @return 反序列化后的对象
//      *
//      * @throws CodecException
//      */
//     <T> T decode(Class<T> clazz, byte[] bytes) throws CodecException;
// 
//     /**
//      * 序列化
//      *
//      * @param object 待序列化的对象
//      *
//      * @return 字节码
//      *
//      * @throws CodecException
//      */
//     <T> byte[] encode(T object) throws CodecException;
// 
//     /**
//      * head的类型
//      *
//      * @return
//      */
//     Class getHeadClass();
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/exception/CodecException.java
// public class CodecException extends RuntimeException {
// 
//     /**
//      * serialVersionUID
//      */
//     private static final long serialVersionUID = 5196421433506179782L;
// 
//     /**
//      * Creates a new instance of CodecException.
//      */
//     public CodecException() {
//         super();
//     }
// 
//     /**
//      * Creates a new instance of CodecException.
//      * 
//      * @param arg0
//      * @param arg1
//      */
//     public CodecException(String arg0, Throwable arg1) {
//         super(arg0, arg1);
//     }
// 
//     /**
//      * Creates a new instance of CodecException.
//      * 
//      * @param arg0
//      */
//     public CodecException(String arg0) {
//         super(arg0);
//     }
// 
//     /**
//      * Creates a new instance of CodecException.
//      * 
//      * @param arg0
//      */
//     public CodecException(Throwable arg0) {
//         super(arg0);
//     }
// 
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/transport/protocol/MsgHead.java
// public final class MsgHead {
// 
//     /**
//      * session内顺序Id
//      */
//     private long seqId;
// 
//     /**
//      * int (4) 当前包的数据长度
//      */
//     private int bodyLen;
// 
//     public static final int SIZE = 12;
// 
//     private static String DEF_ENCODING = "GBK";
// 
//     private MsgHead() {
// 
//     }
// 
//     private MsgHead(long seqId, int bodyLen) {
//         this.seqId = seqId;
//         this.bodyLen = bodyLen;
//     }
// 
//     public static MsgHead create() {
//         return new MsgHead();
//     }
// 
//     public static MsgHead create(long seqId) {
//         MsgHead head = new MsgHead();
//         head.setSeqId(seqId);
//         return head;
//     }
// 
//     /**
//      * write pack_head to transport
//      */
//     public byte[] toBytes() {
//         ByteBuffer bb = ByteBuffer.allocate(SIZE);
//         bb.order(ByteOrder.LITTLE_ENDIAN);
// 
//         try {
//             bb.putLong(seqId);
//             bb.putInt(bodyLen);
//         } catch (Exception e) {
//             throw new RuntimeException("exception when putting bytes for nshead...", e);
//         }
//         return bb.array();
//     }
// 
//     /**
//      * 由byte数组解析成PackHead对象
//      */
//     public static MsgHead fromBytes(byte[] headBytes) {
//         MsgHead head = new MsgHead();
//         if (headBytes.length < MsgHead.SIZE) {
//             throw new RuntimeException("NSHead's size should equal 16.");
//         }
//         ByteBuffer buffer = ByteBuffer.wrap(headBytes);
//         buffer.order(ByteOrder.LITTLE_ENDIAN);
//         head.seqId = buffer.getLong();
//         head.bodyLen = buffer.getInt();
//         return head;
//     }
// 
//     public long getSeqId() {
//         return seqId;
//     }
// 
//     public void setSeqId(long seqId) {
//         this.seqId = seqId;
//     }
// 
//     public int getBodyLen() {
//         return bodyLen;
//     }
// 
//     public void setBodyLen(int bodyLen) {
//         this.bodyLen = bodyLen;
//     }
// 
//     @Override
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
//     }
// }


// Path: src/main/java/com/baidu/unbiz/multiengine/codec/common/MsgHeadCodec.java
import com.baidu.unbiz.multiengine.codec.HeadCodec;
import com.baidu.unbiz.multiengine.exception.CodecException;
import com.baidu.unbiz.multiengine.transport.protocol.MsgHead;

package com.baidu.unbiz.multiengine.codec.common;


/**
 * ClassName: ProtobufCodec <br/>
 * Function: protobuf序列化器，利用反射缓存<tt>method</tt>来进行调用
 */
public class MsgHeadCodec implements HeadCodec {

    @Override
    public <T> T decode(final Class<T> clazz, byte[] data) throws CodecException {
        return (T) MsgHead.fromBytes(data);