public byte[] coding(byte[] data) {
        byte[] inData;
        // 处理奇数字节
        if(data.length % 2 != 0) {
            inData = new byte[data.length + 1];
            inData[inData.length -1] = 0x00;
            System.arraycopy(data, 0, inData, 0, data.length);
        } else {
            inData = data;
        }

        int bufLen = inData.length + (inData.length + 29 ) / 30 * 2 ;
        ByteBuffer buf = ByteBuffer.allocate(bufLen);

        ByteBuffer inDataBuf = ByteBuffer.wrap(inData);
        inDataBuf.clear();
        inDataBuf.order(ByteOrder.BIG_ENDIAN);

        for(int i = 0; i != inData.length / 2; i++) {
            short convertBit = BitTable.getShortBit(14 - (i % 15));
            currentData = inDataBuf.getShort();
            short value = (short)(currentData & convertBit);
            value |= convertData;
            buf.putShort(value);

            convertData = (short)(currentData & (~convertBit));
            convertData = (short)((convertData & 0xFFFF) >> 1);

            if(i % 15 == 14 || i == inData.length / 2 - 1) {
                buf.putShort(convertData);
                convertData = 0x0000;
            }
        }


        return buf.array();
    }