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); }
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); }
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); }
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); } } }
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); } }
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); }