示例#1
0
        public void 断片化のストリームシークテスト()
        {
            var buf    = GetRandam(100);
            var header = GetRandam(20);
            var last   = GetRandam(20);

            var writer = new MessageWriter();

            writer.Set(1, 16);
            writer.Write(buf, 0, buf.Length);
            Assert.AreEqual(buf.Length, writer.Position);

            writer.Seek(20, SeekOrigin.Current);
            Assert.AreEqual(buf.Length + 20, writer.Position);
            Assert.AreEqual(buf.Length + 20, writer.Length, "長さが拡張される");

            writer.Seek(-10, SeekOrigin.Current);
            Assert.AreEqual(buf.Length + 20, writer.Length, "長さはそのまま");

            writer.SetLength(buf.Length);
            Assert.AreEqual(buf.Length, writer.Length, "指定サイズになっている");
            Assert.AreEqual(buf.Length, writer.Position, "短くなったので終端位置が変更される");

            writer.Seek(0, SeekOrigin.Begin);
            Assert.AreEqual(0, writer.Position);

            writer.Write(header, 0, header.Length);
            Assert.AreEqual(header.Length, writer.Position);

            writer.Seek(-last.Length, SeekOrigin.End);
            Assert.AreEqual(buf.Length - last.Length, writer.Position, "終端位置からのシーク");
            writer.Write(last, 0, last.Length);

            var list = new List <Fragment>();

            writer.GetFragments(list);
            var combine = header.Concat(buf.Skip(header.Length).Take(buf.Length - header.Length - last.Length)).Concat(last);

            Assert.IsTrue(Equals(combine.ToArray(), list.ToBytes()), "再度結合しても問題ない");
            list.TryReturn();
        }
示例#2
0
        List <Fragment> GetStreamFragments(byte[] buf, short id, int size, int minWriteSize, int maxWriteSize)
        {
            var writer = new MessageWriter();

            writer.Set(id, size);
            int offset = 0;

            while (offset < buf.Length)
            {
                var writeSize = minWriteSize + (int)(m_Random.NextDouble() * (maxWriteSize - minWriteSize));
                if (offset + writeSize > buf.Length)
                {
                    writeSize = buf.Length - offset;
                }
                writer.Write(buf, offset, writeSize);
                offset += writeSize;
            }
            var list = new List <Fragment>();

            writer.GetFragments(list);
            return(list);
        }