Example #1
0
        public ByteBuffer Serialize(int reservedSize, Func <int, ByteBuffer> bufferCreator)
        {
            byte[] clsNameBytes = Encoding.UTF8.GetBytes(_object.GetType().FullName);
            Debugger.Assert(clsNameBytes.Length <= 256);

            byte[] bytes = ProtoBufUtil.Serialize(_object);

            /// Calculate total length count
            int totalLen = reservedSize + (1 + clsNameBytes.Length) + (2 + bytes.Length);

            Debugger.Assert(totalLen <= ushort.MaxValue);

            /// Write to buffer
            ByteBuffer buffer = bufferCreator(totalLen);

            buffer.position = buffer.position + reservedSize;

            buffer.WriteByte((byte)clsNameBytes.Length);
            buffer.WriteBytes(clsNameBytes);

            buffer.WriteUShort((ushort)bytes.Length);
            buffer.WriteBytes(bytes);

            return(buffer);
        }
Example #2
0
        public void Deserialize(ByteBuffer buffer)
        {
            int    nameLen = buffer.FReadByte();
            string clsName = buffer.FReadString(nameLen);

            Type clazz = _Assembly.GetType(clsName);

            if (null == clazz)
            {
                throw new Exception("PojoObject: Type " + clsName + " not found in assembly!");
            }

            int byteLen = buffer.FReadUShort();

            byte[] bytes = buffer.FReadBytes(byteLen);

            _object = ProtoBufUtil.Deserialize(bytes, clazz);
        }