java.nio.ByteBuffer#putShort ( )源码实例Demo

下面列出了java.nio.ByteBuffer#putShort ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: hbase   文件: TestFuzzyRowAndColumnRangeFilter.java
private void runTest(Table hTable, int cqStart, int expectedSize) throws IOException {
  // [0, 2, ?, ?, ?, ?, 0, 0, 0, 1]
  byte[] fuzzyKey = new byte[10];
  ByteBuffer buf = ByteBuffer.wrap(fuzzyKey);
  buf.clear();
  buf.putShort((short) 2);
  for (int i = 0; i < 4; i++)
    buf.put((byte)63);
  buf.putInt((short)1);

  byte[] mask = new byte[] {0 , 0, 1, 1, 1, 1, 0, 0, 0, 0};

  Pair<byte[], byte[]> pair = new Pair<>(fuzzyKey, mask);
  FuzzyRowFilter fuzzyRowFilter = new FuzzyRowFilter(Lists.newArrayList(pair));
  ColumnRangeFilter columnRangeFilter = new ColumnRangeFilter(Bytes.toBytes(cqStart), true
          , Bytes.toBytes(4), true);
  //regular test
  runScanner(hTable, expectedSize, fuzzyRowFilter, columnRangeFilter);
  //reverse filter order test
  runScanner(hTable, expectedSize, columnRangeFilter, fuzzyRowFilter);
}
 
源代码2 项目: nyzoVerifier   文件: BootstrapResponseV2.java
@Override
public byte[] getBytes() {

    int size = getByteSize();
    byte[] result = new byte[size];
    ByteBuffer buffer = ByteBuffer.wrap(result);

    // frozen-edge height and hash
    buffer.putLong(frozenEdgeHeight);
    buffer.put(frozenEdgeHash);

    // verifiers
    buffer.putShort((short) cycleVerifiers.size());
    for (ByteBuffer identifier : cycleVerifiers) {
        buffer.put(identifier.array());
    }

    return result;
}
 
void assembleMessageParameters() {
    final ByteBuffer paramsBuffer;
    final byte[] applicationKeyIndex = MeshParserUtils.addKeyIndexPadding(mAppKeyIndex);
    //We check if the model identifier value is within the range of a 16-bit value here. If it is then it is a sigmodel
    if (mModelIdentifier >= Short.MIN_VALUE && mModelIdentifier <= Short.MAX_VALUE) {
        paramsBuffer = ByteBuffer.allocate(SIG_MODEL_APP_KEY_BIND_PARAMS_LENGTH).order(ByteOrder.LITTLE_ENDIAN);
        paramsBuffer.putShort((short) mElementAddress);
        paramsBuffer.put(applicationKeyIndex[1]);
        paramsBuffer.put(applicationKeyIndex[0]);
        paramsBuffer.putShort((short) mModelIdentifier);
        mParameters = paramsBuffer.array();
    } else {
        paramsBuffer = ByteBuffer.allocate(VENDOR_MODEL_APP_KEY_BIND_PARAMS_LENGTH).order(ByteOrder.LITTLE_ENDIAN);
        paramsBuffer.putShort((short) mElementAddress);
        paramsBuffer.put(applicationKeyIndex[1]);
        paramsBuffer.put(applicationKeyIndex[0]);
        final byte[] modelIdentifier = new byte[]{(byte) ((mModelIdentifier >> 24) & 0xFF),
                (byte) ((mModelIdentifier >> 16) & 0xFF), (byte) ((mModelIdentifier >> 8) & 0xFF), (byte) (mModelIdentifier & 0xFF)};
        paramsBuffer.put(modelIdentifier[1]);
        paramsBuffer.put(modelIdentifier[0]);
        paramsBuffer.put(modelIdentifier[3]);
        paramsBuffer.put(modelIdentifier[2]);
        mParameters = paramsBuffer.array();
    }
}
 
/**
 * Transform unit data to byte array.
 * <p/>
 * <li>1. @{code container} can be null, it will be created if null.</li>
 * <li>2. if capacity of @{code container} is less than unit size, it will be created also.</li>
 * <li>3. Pls be sure that size of unit is not greater than {@link #MAX_EXT_UNIT_SIZE}</li>
 *
 * @param container
 * @return
 */
private byte[] write(final ByteBuffer container) {
    this.bitMapSize = (short) (filterBitMap == null ? 0 : filterBitMap.length);
    this.size = (short) (MIN_EXT_UNIT_SIZE + this.bitMapSize);

    ByteBuffer temp = container;

    if (temp == null || temp.capacity() < this.size) {
        temp = ByteBuffer.allocate(this.size);
    }

    temp.flip();
    temp.limit(this.size);

    temp.putShort(this.size);
    temp.putLong(this.tagsCode);
    temp.putLong(this.msgStoreTime);
    temp.putShort(this.bitMapSize);
    if (this.bitMapSize > 0) {
        temp.put(this.filterBitMap);
    }

    return temp.array();
}
 
源代码5 项目: Android-nRF-Mesh-Library   文件: SceneDelete.java
@Override
void assembleMessageParameters() {
    mAid = SecureUtils.calculateK4(mAppKey.getKey());
    final ByteBuffer paramsBuffer;
    Log.v(TAG, "Scene Number: " + mSceneNumber);
    paramsBuffer = ByteBuffer.allocate(SCENE_DELETE_PARAMS_LENGTH).order(ByteOrder.LITTLE_ENDIAN);
    paramsBuffer.putShort((short) mSceneNumber);
    mParameters = paramsBuffer.array();
}
 
源代码6 项目: onos   文件: Fragment.java
@Override
public byte[] serialize() {
    byte[] payloadData = null;
    if (this.payload != null) {
        this.payload.setParent(this);
        payloadData = this.payload.serialize();
    }

    int payloadLength = 0;
    if (payloadData != null) {
        payloadLength = payloadData.length;
    }

    final byte[] data = new byte[HEADER_LENGTH + payloadLength];
    final ByteBuffer bb = ByteBuffer.wrap(data);

    bb.put(this.nextHeader);
    bb.put((byte) 0);
    bb.putShort((short) (
            (this.fragmentOffset & 0x1fff) << 3 |
            this.moreFragment & 0x1
    ));
    bb.putInt(this.identification);

    if (payloadData != null) {
        bb.put(payloadData);
    }

    if (this.parent != null && this.parent instanceof IExtensionHeader) {
        ((IExtensionHeader) this.parent).setNextHeader(IPv6.PROTOCOL_FRAG);
    }
    return data;
}
 
源代码7 项目: beacons-android   文件: EddystoneTLM.java
@Override
public Advertiser createAdvertiser(BleService service) {
    byte[] data = new byte[12];

    if (null != service) {
        ByteBuffer buffer = ByteBuffer.wrap(data);
        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        Intent stickyIntent = service.registerReceiver(null, intentFilter);
        if (null != stickyIntent) {
            mBatteryVoltage = (short) stickyIntent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0);
            buffer.putShort(mBatteryVoltage);

            mBatteryTemperature = stickyIntent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0);

            // (int * 10) to fixed point 8.8
            buffer.putShort((short) (mBatteryTemperature / 10 << 8 | mBatteryTemperature % 10 * 256 / 10));

            mEstimatedPDUCount = (int) service.updateEstimatedPDUCount();
            buffer.putInt(mEstimatedPDUCount);

            mPowerOnTime = (int) service.getPowerOnTime();
            buffer.putInt(mPowerOnTime / 100);
        }
    }

    return new EddystoneAdvertiser(this, EddystoneAdvertiser.FRAME_TLM, data, 0, data.length);
}
 
源代码8 项目: Android-Audio-Recorder   文件: MuxerMP4.java
public void encode(short[] buf) {
    for (int offset = 0; offset < buf.length; ) {
        int len = buf.length - offset;

        int inputIndex = encoder.dequeueInputBuffer(-1);
        if (inputIndex < 0)
            throw new RuntimeException("unable to open encoder input buffer");

        ByteBuffer input = encoder.getInputBuffer(inputIndex);
        input.clear();

        len = Math.min(len, input.limit() / 2);

        for (int i = 0; i < len; i++)
            input.putShort(buf[i]);

        int bytes = len * 2;

        long ts = getCurrentTimeStamp();
        encoder.queueInputBuffer(inputIndex, 0, bytes, ts, 0);
        NumSamples += len / info.channels;
        offset += len;

        while (encode())
            ;// do encode()
    }
}
 
源代码9 项目: kop   文件: GroupMetadataConstants.java
/**
 * Generates the payload for offset commit message from given offset and metadata.
 *
 * @param offsetAndMetadata consumer's current offset and metadata
 * @return payload for offset commit message
 */
static byte[] offsetCommitValue(OffsetAndMetadata offsetAndMetadata) {
    Struct value = new Struct(CURRENT_OFFSET_VALUE_SCHEMA);
    value.set(OFFSET_VALUE_OFFSET_FIELD_V1, offsetAndMetadata.offset());
    value.set(OFFSET_VALUE_METADATA_FIELD_V1, offsetAndMetadata.metadata());
    value.set(OFFSET_VALUE_COMMIT_TIMESTAMP_FIELD_V1, offsetAndMetadata.commitTimestamp());
    value.set(OFFSET_VALUE_EXPIRE_TIMESTAMP_FIELD_V1, offsetAndMetadata.expireTimestamp());
    ByteBuffer byteBuffer = ByteBuffer.allocate(2 /* version */ + value.sizeOf());
    byteBuffer.putShort(CURRENT_GROUP_VALUE_SCHEMA_VERSION);
    value.writeTo(byteBuffer);
    return byteBuffer.array();
}
 
源代码10 项目: phoebus   文件: PVAStructure.java
@Override
public void encodeType(final ByteBuffer buffer, final BitSet described) throws Exception
{
    final short type_id = getTypeID();
    if (type_id != 0)
    {
        final int u_type_id = Short.toUnsignedInt(type_id);
        if (described.get(u_type_id))
        {   // Refer to existing definition
            buffer.put(PVAFieldDesc.ONLY_ID_TYPE_CODE);
            buffer.putShort(type_id);
            // Done!
            return;
        }
        else
        {   // (Re-)define this type
            buffer.put(PVAFieldDesc.FULL_WITH_ID_TYPE_CODE);
            buffer.putShort(type_id);
            described.set(u_type_id);
        }
    }

    // Encode 'structure' type, name
    buffer.put((byte) (PVAComplex.FIELD_DESC_TYPE | PVAComplex.STRUCTURE));
    PVAString.encodeString(struct_name, buffer);

    // Encode elements
    PVASize.encodeSize(elements.size(), buffer);
    for (PVAData element : elements)
    {
        PVAString.encodeString(element.getName(), buffer);
        element.encodeType(buffer, described);
    }
}
 
源代码11 项目: vespa   文件: PacketTest.java
@org.junit.Test
public void testReplyPacket() {
    Values ret = new Values();
    ret.add(new Int32Value(123));

    Packet packet = new ReplyPacket(0, 42, ret);
    PacketInfo info = packet.getPacketInfo();

    ByteBuffer buf = ByteBuffer.allocate(info.packetLength());
    info.encodePacket(packet, buf);
    buf.flip();

    int bytes = 12 + ret.bytes();
    ByteBuffer ref = ByteBuffer.allocate(bytes);
    ref.putInt(bytes - 4);    // plen
    ref.putShort((short)0);   // flags
    ref.putShort((short)101); // pcode (reply)
    ref.putInt(42);           // reqId
    ret.encode(ref);
    assertEquals(0, ref.remaining());
    ref.flip();
    assertTrue(buf.equals(ref));

    PacketInfo info2 = PacketInfo.getPacketInfo(buf);
    assertTrue(info2 != null);
    assertEquals(info2.packetLength(), buf.remaining());
    Packet packet2 = info2.decodePacket(buf);
    assertEquals(0, buf.remaining());

    assertEquals(packet2.requestId(), 42);
    Values ret2 = ((ReplyPacket)packet2).returnValues();
    assertEquals(ret2.size(), 1);
    assertEquals(ret2.get(0).type(), Value.INT32);
    assertEquals(ret2.get(0).asInt32(), 123);
}
 
源代码12 项目: onos   文件: Ethernet.java
@Override
public byte[] serialize() {
    byte[] payloadData = null;
    if (this.payload != null) {
        this.payload.setParent(this);
        payloadData = this.payload.serialize();
    }
    int length = 14 + (this.vlanID == Ethernet.VLAN_UNTAGGED ? 0 : 4)
            + (this.qinqVID == Ethernet.VLAN_UNTAGGED ? 0 : 4)
            + (payloadData == null ? 0 : payloadData.length);
    if (this.pad && length < 60) {
        length = 60;
    }
    final byte[] data = new byte[length];
    final ByteBuffer bb = ByteBuffer.wrap(data);
    bb.put(this.destinationMACAddress.toBytes());
    bb.put(this.sourceMACAddress.toBytes());
    if (this.qinqVID != Ethernet.VLAN_UNTAGGED) {
        bb.putShort(this.qinqTPID);
        bb.putShort((short) (this.qInQPriorityCode << 13 | this.qinqVID & 0x0fff));
    }
    if (this.vlanID != Ethernet.VLAN_UNTAGGED) {
        bb.putShort(TYPE_VLAN);
        bb.putShort((short) (this.priorityCode << 13 | this.vlanID & 0x0fff));
    }
    bb.putShort(this.etherType);
    if (payloadData != null) {
        bb.put(payloadData);
    }
    if (this.pad) {
        Arrays.fill(data, bb.position(), data.length, (byte) 0x0);
    }
    return data;
}
 
源代码13 项目: JavaLinuxNet   文件: libpcapTest.java
public static ByteBuffer getIPPacket(int len, byte protocol, int srcIp, int dstIp) {
    //create UDP packet
    ByteBuffer ipPacket = ByteBuffer.allocateDirect(len);
    ipPacket.put((byte) 0x45);  //ipv4 , size header
    ipPacket.put((byte) 0x00);  //tos
    ipPacket.putShort((short) (len & 0xffff));  //len=64
    ipPacket.putShort((short) 0x00);  //identification=0
    ipPacket.putShort((short) 0x00);  //flags/fragment
    ipPacket.put((byte) 0x40);  //TTL=64
    ipPacket.put(protocol);  //protocol
    ipPacket.putShort((short) 0x00);  //checksum
    return ipPacket;
}
 
源代码14 项目: rocketmq   文件: RocketMQSerializable.java
public static byte[] rocketMQProtocolEncode(RemotingCommand cmd) {
    // String remark
    byte[] remarkBytes = null;
    int remarkLen = 0;
    if (cmd.getRemark() != null && cmd.getRemark().length() > 0) {
        remarkBytes = cmd.getRemark().getBytes(CHARSET_UTF8);
        remarkLen = remarkBytes.length;
    }

    // HashMap<String, String> extFields
    byte[] extFieldsBytes = null;
    int extLen = 0;
    if (cmd.getExtFields() != null && !cmd.getExtFields().isEmpty()) {
        extFieldsBytes = mapSerialize(cmd.getExtFields());
        extLen = extFieldsBytes.length;
    }

    int totalLen = calTotalLen(remarkLen, extLen);

    ByteBuffer headerBuffer = ByteBuffer.allocate(totalLen);
    // int code(~32767)
    headerBuffer.putShort((short) cmd.getCode());
    // LanguageCode language
    headerBuffer.put(cmd.getLanguage().getCode());
    // int version(~32767)
    headerBuffer.putShort((short) cmd.getVersion());
    // int opaque
    headerBuffer.putInt(cmd.getOpaque());
    // int flag
    headerBuffer.putInt(cmd.getFlag());
    // String remark
    if (remarkBytes != null) {
        headerBuffer.putInt(remarkBytes.length);
        headerBuffer.put(remarkBytes);
    } else {
        headerBuffer.putInt(0);
    }
    // HashMap<String, String> extFields;
    if (extFieldsBytes != null) {
        headerBuffer.putInt(extFieldsBytes.length);
        headerBuffer.put(extFieldsBytes);
    } else {
        headerBuffer.putInt(0);
    }

    return headerBuffer.array();
}
 
源代码15 项目: gemfirexd-oss   文件: DecrementCommand.java
private ByteBuffer processBinaryProtocol(RequestReader request, Cache cache) {
  ByteBuffer buffer = request.getRequest();
  int extrasLength = buffer.get(EXTRAS_LENGTH_INDEX);
  final KeyWrapper key = getKey(buffer, HEADER_LENGTH + extrasLength);
  
  long decrBy = buffer.getLong(HEADER_LENGTH);
  long initialVal = buffer.getLong(HEADER_LENGTH + LONG_LENGTH);
  int expiration = buffer.getInt(HEADER_LENGTH + LONG_LENGTH + LONG_LENGTH);
  
  final Region<Object, ValueWrapper> r = getMemcachedRegion(cache);
  ByteBuffer newVal = ByteBuffer.allocate(8);
  boolean notFound = false;
  ValueWrapper newValWrapper = null;
  
  while (true) {
    ValueWrapper oldValWrapper = r.get(key);
    if (oldValWrapper == null) {
      if (expiration == -1) {
        notFound = true;
      } else {
        newVal.putLong(0, initialVal);
        newValWrapper = ValueWrapper.getWrappedValue(newVal.array(), 0/*flags*/);
        r.put(key, newValWrapper);
      }
      break;
    }
    byte[] oldVal = oldValWrapper.getValue();
    long oldLong = getLongFromByteArray(oldVal);
    long newLong = oldLong - decrBy;
    if (newLong < 0) {
      newLong = 0;
    }
    newVal.putLong(0, newLong);
    newValWrapper = ValueWrapper.getWrappedValue(newVal.array(), 0/*flags*/);
    if (r.replace(key, oldValWrapper, newValWrapper)) {
      break;
    }
  }
  
  if (expiration > 0) {
    StorageCommand.getExpiryExecutor().schedule(new Runnable() {
      @Override
      public void run() {
        r.destroy(key);
      }
    }, expiration, TimeUnit.SECONDS);
  }
  
  if (getLogger().fineEnabled()) {
    getLogger().fine("decr:key:"+key+" decrBy:"+decrBy+" initVal:"+initialVal+" exp:"+expiration+" notFound:"+notFound);
  }
  
  ByteBuffer response = null;
  if (notFound) {
    response = request.getResponse();
    response.putShort(POSITION_RESPONSE_STATUS, ResponseStatus.KEY_NOT_FOUND.asShort());
  } else {
    if (isQuiet()) {
      return null;
    }
    response = request.getResponse(HEADER_LENGTH + LONG_LENGTH);
    response.putInt(TOTAL_BODY_LENGTH_INDEX, LONG_LENGTH);
    response.putLong(HEADER_LENGTH, newVal.getLong(0));
    response.putLong(POSITION_CAS, newValWrapper.getVersion());
  }
  return response;
}
 
源代码16 项目: jackcess   文件: IndexData.java
/**
 * Writes the index definitions into a table definition buffer.
 * @param creator description of the indexes to write
 * @param buffer Buffer to write to
 */
protected static void writeDefinition(
    TableMutator creator, ByteBuffer buffer,
    TableMutator.IndexDataState idxDataState, ByteBuffer rootPageBuffer)
  throws IOException
{
  if(rootPageBuffer == null) {
    rootPageBuffer = createRootPageBuffer(creator);
  }

  buffer.putInt(MAGIC_INDEX_NUMBER); // seemingly constant magic value

  // write column information (always MAX_COLUMNS entries)
  IndexBuilder idx = idxDataState.getFirstIndex();
  List<IndexBuilder.Column> idxColumns = idx.getColumns();
  for(int i = 0; i < MAX_COLUMNS; ++i) {

    short columnNumber = COLUMN_UNUSED;
    byte flags = 0;

    if(i < idxColumns.size()) {

      // determine column info
      IndexBuilder.Column idxCol = idxColumns.get(i);
      flags = idxCol.getFlags();

      // find actual table column number
      columnNumber = creator.getColumnNumber(idxCol.getName());
      if(columnNumber == COLUMN_UNUSED) {
        // should never happen as this is validated before
        throw new IllegalArgumentException(
            withErrorContext(
                "Column with name " + idxCol.getName() + " not found",
                creator.getDatabase(), creator.getTableName(), idx.getName()));
      }
    }

    buffer.putShort(columnNumber); // table column number
    buffer.put(flags); // column flags (e.g. ordering)
  }

  buffer.put(idxDataState.getUmapRowNumber()); // umap row
  ByteUtil.put3ByteInt(buffer, idxDataState.getUmapPageNumber()); // umap page

  // write empty root index page
  creator.getPageChannel().writePage(rootPageBuffer,
                                     idxDataState.getRootPageNumber());

  buffer.putInt(idxDataState.getRootPageNumber());
  buffer.putInt(0); // unknown
  buffer.put(idx.getFlags()); // index flags (unique, etc.)
  ByteUtil.forward(buffer, 5); // unknown
}
 
private ByteBuffer createDynamicCompositeKey(String s, UUID uuid, int i, boolean lastIsOne,
        final boolean reversed)
{
    String intType = (reversed ? "ReversedType(IntegerType)" : "IntegerType");
    ByteBuffer bytes = ByteBufferUtil.bytes(s);
    int totalSize = 0;
    if (s != null)
    {
        totalSize += 2 + 2 + bytes.remaining() + 1;
        if (uuid != null)
        {
            totalSize += 2 + 2 + 16 + 1;
            if (i != -1)
            {
                totalSize += 2 + intType.length() + 2 + 1 + 1;
            }
        }
    }

    ByteBuffer bb = ByteBuffer.allocate(totalSize);

    if (s != null)
    {
        bb.putShort((short)(0x8000 | (reversed ? 'B' : 'b')));
        bb.putShort((short) bytes.remaining());
        bb.put(bytes);
        bb.put(uuid == null && lastIsOne ? (byte)1 : (byte)0);
        if (uuid != null)
        {
            bb.putShort((short)(0x8000 | (reversed ? 'T' : 't')));
            bb.putShort((short) 16);
            bb.put(UUIDGen.decompose(uuid));
            bb.put(i == -1 && lastIsOne ? (byte)1 : (byte)0);
            if (i != -1)
            {
                bb.putShort((short) intType.length());
                bb.put(ByteBufferUtil.bytes(intType));
                // We are putting a byte only because our test use ints that fit in a byte *and* IntegerType.fromString() will
                // return something compatible (i.e, putting a full int here would break 'fromStringTest')
                bb.putShort((short) 1);
                bb.put((byte)i);
                bb.put(lastIsOne ? (byte)1 : (byte)0);
            }
        }
    }
    bb.rewind();
    return bb;
}
 
源代码18 项目: netcdf-java   文件: NmcObsLegacy.java
void loadStructureData(ByteBuffer bb) {
  bb.putInt(data);
  bb.putShort(table101code);
  bb.put(quality);
}
 
源代码19 项目: joyqueue   文件: Serializer.java
/**
     * 写入存储消息
     *
     * @param message 存储消息
     * @param out     输出缓冲区
     * @throws Exception 序列化异常
     */
    public static void write(final BrokerMessage message, final ByteBuffer out, int size) throws Exception {
        // FIXME: size没用,是否可以去掉?
//        int size;
        if (out == null || message == null) {
            return;
        }
        // 记录写入的起始位置
        int begin = out.position();
        // 4个字节的消息长度需要计算出来
        out.putInt(size);
        // 分区
        out.putShort(message.getPartition());
        //消息序号
        out.putLong(message.getMsgIndexNo());
        // 任期
        out.putInt(message.getTerm());
        // 2个字节的魔法标识
        out.putShort(BrokerMessage.MAGIC_CODE);

        //   | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
        //TODO   1个字节的系统字段 1-1:压缩标识 2-2:顺序消息 3-4: 消息来源,包括Jmq,kafka,mqtt 5-5:压缩算法 6-8:其他,预留未用
        byte sysCode = (byte) (message.isCompressed() ? 1 : 0);
        sysCode |= ((message.isOrdered() ? 1 : 0) << 1) & 0x3;

        sysCode |= (message.getSource() << 2) & 12;
        // compressor
        if (message.isCompressed()) {
            sysCode |= (message.getCompressionType().getType() << 4) & 48;
        }
        if (message.getClientIp().length < 7) {
            sysCode |= (1 << 5);
        }
        //T 2字节系统字段
        byte [] sysCodes = new byte[2];
        sysCodes[1] = sysCode;
        out.put(sysCodes);
        // 1字节优先级
        out.put(message.getPriority());
        // 16字节的客户端地址
        byte [] clientIp = new byte[16];
        if(message.getClientIp() != null) {
            System.arraycopy(message.getClientIp(), 0, clientIp,0, Math.min(message.getClientIp().length, clientIp.length));
        }
        out.put(clientIp);
//        out.put(message.getClientIp() == null ? new byte[16] : message.getClientIp());
//        if (message.getClientIp().length < 7){
//            out.put(new byte[10]);
//        }
        // 8字节发送时间
        out.putLong(message.getStartTime());
        // 4字节存储时间(相对发送时间的偏移)
        out.putInt(0);
        // 8字节消息体CRC
        out.putLong(message.getBodyCRC());

        // 4字节消息体大小
        // 消息体(字节数组)
        if (message.getByteBody() != null) {
            write(message.getBody(), out, true);
        } else {
            out.putInt(0);
        }

        // 1字节应用长度
        // 应用(字节数组)
        write(message.getApp(), out);
        // 1字节业务ID长度
        // 业务ID(字节数组)
        write(message.getBusinessId(), out);
        // 2字节属性长度
        // 属性(字节数组)
        write(toProperties(message.getAttributes()), out, 2);
        // 4字节扩展字段大小
        // 扩展字段(字节数组)
        write(message.getExtension(), out, true);

        // 重写总长度
//        int end = out.position();
//        size = end - begin;
        message.setSize(size);
//        out.position(begin);
//        out.putInt(size);
        out.flip();
//        out.position(end);
    }
 
源代码20 项目: aion-germany   文件: PacketWriteHelper.java
/**
 * Write short to buffer.
 *
 * @param buf
 * @param value
 */
protected final void writeH(ByteBuffer buf, int value) {
	buf.putShort((short) value);
}