public string[] ReadStringArray() { StringTypeFlag flag = (StringTypeFlag)_reader.ReadByte(); if (flag == StringTypeFlag.NULL) { return(null); } int len; if (flag == StringTypeFlag.ByteLen) { len = _reader.ReadByte(); } else if (flag == StringTypeFlag.ShortLen) { len = _reader.ReadInt16(); } else { len = _reader.ReadInt32(); } string[] ret = new string[len]; for (int i = 0; i < len; i++) { ret[i] = ReadString(); } return(ret); }
public void WriteString(string str) { CheckBufferPoll(1); if (str == null) { _ms.WriteByte((byte)StringTypeFlag.NULL); return; } else if (string.IsNullOrWhiteSpace(str)) { _ms.WriteByte((byte)StringTypeFlag.Empty); return; } byte[] byts; StringTypeFlag flag = StringTypeFlag.DEFAULT; //bool isAsscii = StringHelper.IsAscii(str); bool isAsscii = false; if (isAsscii) { flag = StringTypeFlag.AssciiEncoding; byts = Encoding.ASCII.GetBytes(str); } else { flag = StringTypeFlag.UTF8Encoding; byts = Encoding.UTF8.GetBytes(str); } byte[] lenbytes = null; flag |= StringTypeFlag.IntLen; lenbytes = BitConverter.GetBytes(byts.Length); CheckBufferPoll(5 + byts.Length); _ms.WriteByte((byte)flag); _ms.Write(lenbytes, 0, lenbytes.Length); _ms.Write(byts, 0, byts.Length); }
public void WriteString(string str) { CheckBufferPoll(1); if (str == null) { _ms.WriteByte((byte)StringTypeFlag.NULL); return; } else if (string.IsNullOrWhiteSpace(str)) { _ms.WriteByte((byte)StringTypeFlag.Empty); return; } byte[] byts; StringTypeFlag flag = StringTypeFlag.DEFAULT; //bool isAsscii = StringHelper.IsAscii(str); bool isAsscii = false; if (isAsscii) { flag = StringTypeFlag.AssciiEncoding; byts = Encoding.ASCII.GetBytes(str); } else { flag = StringTypeFlag.UTF8Encoding; byts = Encoding.UTF8.GetBytes(str); } byte[] lenbytes = null; if (byts.Length <= byte.MaxValue) { flag |= StringTypeFlag.ByteLen; lenbytes = new byte[] { (byte)byts.Length }; } else if (byts.Length <= Int16.MaxValue) { flag |= StringTypeFlag.ShortLen; lenbytes = BitConverter.GetBytes((Int16)byts.Length); } else if (byts.LongLength <= Int32.MaxValue) { flag |= StringTypeFlag.IntLen; lenbytes = BitConverter.GetBytes(byts.Length); } else if (byts.LongLength < Int64.MaxValue) { flag |= StringTypeFlag.LongLen; lenbytes = BitConverter.GetBytes(byts.LongLength); } else { throw new OverflowException("字符串太长。"); } CheckBufferPoll(5 + byts.Length); _ms.WriteByte((byte)flag); _ms.Write(lenbytes, 0, lenbytes.Length); _ms.Write(byts, 0, byts.Length); }