コード例 #1
0
        /// <summary>
        /// Writes bytes to the stream at the current position, advancing
        /// the position past the data written.
        /// </summary>
        /// <param name="buffer">The source buffer.</param>
        /// <param name="offset">Offset of the first byte to write.</param>
        /// <param name="count">Number of bytes to read.</param>
        public override void Write(byte[] buffer, int offset, int count)
        {
            try
            {
                unchecked
                {
                    if (pos + count < 0)  // Checking for wraparound
                    {
                        throw new IOException(TooLongError);
                    }
                }

                blocks.ExtendTo(pos + count);
                blocks.CopyFrom(buffer, offset, pos, count);

                pos += count;

                if (pos > length)
                {
                    length = pos;
                }
            }
            catch
            {
                throw new IOException();
            }
        }
コード例 #2
0
        private void CopyFromTest(int bufSize, int blockSize, int cbCopy)
        {
            BlockArray blocks;

            byte[] arr;
            byte[] cmp;
            int    pos;

            blocks = new BlockArray(bufSize, blockSize);

            Zero(blocks);
            arr = new byte[cbCopy];
            for (int i = 0; i < cbCopy; i++)
            {
                arr[i] = (byte)i;
            }

            blocks.CopyFrom(arr, 0, 0, cbCopy);
            cmp = new byte[bufSize];
            for (int i = 0; i < cbCopy; i++)
            {
                cmp[i] = (byte)i;
            }

            arr = new byte[bufSize];
            blocks.CopyTo(0, arr, 0, bufSize);
            Assert.Equal(cmp, arr);

            Zero(blocks);
            arr = new byte[cbCopy];
            for (int i = 0; i < cbCopy; i++)
            {
                arr[i] = (byte)i;
            }

            if (cbCopy == 0)
            {
                return;
            }

            pos = 0;
            for (int i = 0; i < blockSize / cbCopy; i++)
            {
                blocks.CopyFrom(arr, 0, pos, cbCopy);
                pos += cbCopy;
            }

            pos = 0;
            cmp = new byte[bufSize];
            for (int i = 0; i < blockSize / cbCopy; i++)
            {
                for (int j = 0; j < cbCopy; j++)
                {
                    cmp[pos++] = (byte)j;
                }
            }

            arr = new byte[bufSize];
            blocks.CopyTo(0, arr, 0, bufSize);
            Assert.Equal(cmp, arr);

            Zero(blocks);
            arr = new byte[cbCopy + 10];
            cmp = new byte[cbCopy + 10];
            for (int i = 0; i < cbCopy; i++)
            {
                cmp[i + 10] = (byte)i;
            }

            blocks.CopyFrom(cmp, 10, 0, cbCopy);
            blocks.CopyTo(0, arr, 10, cbCopy);
            Assert.Equal(cmp, arr);
        }