Exemplo n.º 1
0
        public bool[] ReadBoolArray()
        {
            ArrayTypeFlag flag = (ArrayTypeFlag)_reader.ReadByte();

            if (flag == ArrayTypeFlag.NULL)
            {
                return(null);
            }
            else if (flag == ArrayTypeFlag.Empty)
            {
                return(new bool[0]);
            }
            //取长度
            uint
                len = _reader.ReadUInt32();

            bool[]   ret  = new bool[len];
            byte[]   byts = _reader.ReadBytes((int)Math.Ceiling(len / 8.0));
            BitArray ba   = new BitArray(byts);

            for (int i = 0; i < len; i++)
            {
                ret[i] = ba[i];
            }
            return(ret);
        }
Exemplo n.º 2
0
        public Int32[] ReadInt32Array()
        {
            ArrayTypeFlag flag = (ArrayTypeFlag)_reader.ReadByte();

            if (flag == ArrayTypeFlag.NULL)
            {
                return(null);
            }
            //取长度
            int len = _reader.ReadInt32();

            Int32[] ret        = new int[len];
            bool    isCompress = (flag & ArrayTypeFlag.Compress) == ArrayTypeFlag.Compress;

            for (int i = 0; i < len; i++)
            {
                if (isCompress)
                {
                    ret[i] = ReadInt32();
                }
                else
                {
                    ret[i] = _reader.ReadInt32();
                }
            }
            return(ret);
        }
Exemplo n.º 3
0
        public Int64[] ReadInt64Array()
        {
            ArrayTypeFlag flag = (ArrayTypeFlag)_reader.ReadByte();

            if (flag == ArrayTypeFlag.NULL)
            {
                return(null);
            }
            else if (flag == ArrayTypeFlag.Empty)
            {
                return(new Int64[0]);
            }
            //取长度
            uint len;

            if ((flag & ArrayTypeFlag.ByteLen) == ArrayTypeFlag.ByteLen)
            {
                len = _reader.ReadByte();
            }
            else if ((flag & ArrayTypeFlag.ShortLen) == ArrayTypeFlag.ShortLen)
            {
                len = _reader.ReadUInt16();
            }
            else
            {
                len = _reader.ReadUInt32();
            }

            Int64[] ret = new Int64[len];
            for (int i = 0; i < len; i++)
            {
                ret[i] = ReadInt64();
            }
            return(ret);
        }
Exemplo n.º 4
0
        public void WriteInt32Array(Int32[] numArray)
        {
            CheckBufferPoll(numArray == null ? 1 : 5);

            if (numArray == null)
            {
                _ms.WriteByte((byte)ArrayTypeFlag.NULL);
                return;
            }

            bool          isCompress = numArray.Where(p => p <= ushort.MaxValue).Count() > (numArray.Length * 2 / 3);
            ArrayTypeFlag flag       = isCompress ? ArrayTypeFlag.Compress : ArrayTypeFlag.DEFAULT;

            byte[] bytelen = CompressInt32(numArray.Length);
            if (bytelen.Length == 1)
            {
                _ms.WriteByte((byte)(ArrayTypeFlag.ByteLen | flag));
            }
            else if (bytelen.Length == 2)
            {
                _ms.WriteByte((byte)(ArrayTypeFlag.ShortLen | flag));
            }
            else
            {
                _ms.WriteByte((byte)(ArrayTypeFlag.IntLen | flag));
            }
            _ms.Write(bytelen, 0, bytelen.Length);
            foreach (int num in numArray)
            {
                if (!isCompress)
                {
                    _ms.Write(BitConverter.GetBytes(num), 0, 4);
                }
                else
                {
                    WriteInt32(num);
                }
            }
        }
Exemplo n.º 5
0
        public void WriteBoolArray(bool[] booArray)
        {
            CheckBufferPoll(booArray == null ? 1 : booArray.Length + 5);

            if (booArray == null)
            {
                _ms.WriteByte((byte)ArrayTypeFlag.NULL);
                return;
            }
            else if (booArray.Length == 0)
            {
                _ms.WriteByte((byte)ArrayTypeFlag.Empty);
                return;
            }

            ArrayTypeFlag flag    = ArrayTypeFlag.DEFAULT;
            int           len     = booArray.Length;
            var           bytelen = CompressInt32(len);

            if (bytelen.Length == 1)
            {
                flag = ArrayTypeFlag.ByteLen;
            }
            else if (bytelen.Length == 2)
            {
                flag = ArrayTypeFlag.ShortLen;
            }

            _ms.WriteByte((byte)flag);
            _ms.Write(bytelen, 0, bytelen.Length);
            BitArray ba = new BitArray(booArray);

            var btarray = BitHelper.ConvertToByteArray(ba);

            foreach (byte b in btarray)
            {
                _ms.WriteByte(b);
            }
        }
Exemplo n.º 6
0
        public DateTime[] ReadDateTimeArray()
        {
            ArrayTypeFlag flag = (ArrayTypeFlag)_reader.ReadByte();

            if (flag == ArrayTypeFlag.NULL)
            {
                return(null);
            }
            else if (flag == ArrayTypeFlag.Empty)
            {
                return(new DateTime[0]);
            }

            uint len = _reader.ReadUInt32();

            DateTime[] ret = new DateTime[len];
            for (int i = 0; i < len; i++)
            {
                double db = _reader.ReadDouble();
                ret[i] = DateTime.FromOADate(db);
            }
            return(ret);
        }