public void GetByteRange_WhenBufferIsSmallerThanRequestedCount_Throws()
        {
            // Arrange
            var bytes = Enumerable.Range(0, 255).Select(i => (byte)i).ToArray();

            using var ms = new MemoryStream(bytes);
            var streamByteBuffer = new StreamByteBuffer(ms, 0, 255);

            // Act + Assert
            var buffer = new byte[10];

            Assert.Throws <ArgumentException>(() => streamByteBuffer.GetByteRange(0, 20, buffer));
        }
        public void Data_CompareWithInitializer_ExactMatch(int offset, int count)
        {
            // Arrange
            var bytes    = Enumerable.Range(0, 255).Select(i => (byte)i).ToArray();
            var expected = new ArraySegment <byte>(bytes, offset, count);

            using var ms = new MemoryStream(bytes);
            var buffer = new StreamByteBuffer(ms, offset, count);

            // Act
            var actual = buffer.Data;

            // Assert
            Assert.Equal(expected.Count, actual.Length);
            Assert.Equal(expected, actual);
        }
        public void GetByteRange_CompareWithInitializer_ExactMatch(int ctorOffset, int ctorCount, int byteRangeOffset, int byteRangeCount)
        {
            // Arrange
            var bytes = Enumerable.Range(0, 255).Select(i => (byte)i).ToArray();

            using var ms = new MemoryStream(bytes);
            var buffer   = new StreamByteBuffer(ms, ctorOffset, ctorCount);
            var expected = new ArraySegment <byte>(bytes, ctorOffset + byteRangeOffset, Math.Min(ctorCount, byteRangeCount));

            // Act
            var actual = new byte[Math.Min(ctorCount, byteRangeCount)];

            buffer.GetByteRange(byteRangeOffset, byteRangeCount, actual);

            // Assert
            Assert.Equal(expected.Count, actual.Length);
            Assert.Equal(expected, actual);
        }
示例#4
0
        /// <summary>
        /// Gets a byte buffer of specified length from the current position and moves to subsequent position.
        /// </summary>
        /// <param name="count">Number of bytes to read.</param>
        /// <returns>Byte buffer containing the read bytes.</returns>
        public IByteBuffer GetBuffer(uint count)
        {
            IByteBuffer buffer = null;

            if (count == 0)
            {
                buffer = EmptyBuffer.Value;
            }
            else if (count >= this.LargeObjectSize)
            {
                buffer = new StreamByteBuffer(_stream, _stream.Position, count);
                _stream.Seek((int)count, SeekOrigin.Current);
            }
            else
            {
                buffer = new MemoryByteBuffer(GetBytes((int)count));
            }
            return(buffer);
        }
        public void CopyToStream_ShouldWorkCorrectly(int total, int offset, int count)
        {
            // Arrange
            var bytes = Enumerable.Range(0, total).Select(i => (byte)i).ToArray();

            using var inputMs  = new MemoryStream(bytes);
            using var outputMs = new MemoryStream(bytes.Length);
            var buffer   = new StreamByteBuffer(inputMs, offset, count);
            var expected = new ArraySegment <byte>(bytes, offset, count);

            // Act
            buffer.CopyToStream(outputMs);

            // Assert
            var actual = outputMs.ToArray();

            Assert.Equal(expected.Count, actual.Length);
            Assert.Equal(expected, actual);
        }
示例#6
0
        static void Example()
        {
            string imageContentFile = WORKING_DIR + @"\image_content.data";

            // Example of reading an image file and serializing it into a single binary file
            using (var buffer = new StreamByteBuffer(new FileStream(imageContentFile, FileMode.Create, FileAccess.Write, FileShare.None)))
                using (var context = new SerializationContext(buffer))
                {
                    var container = BuildSerializableEntity(context);
                    container.Serialize();
                }

            // Example of deserializing an binary file
            using (var buffer = new StreamByteBuffer(new FileStream(imageContentFile, FileMode.Open, FileAccess.Read, FileShare.None)))
                using (var context = new SerializationContext(buffer))
                {
                    var container = new ContentContainer(context);
                    container.Deserialize();
                }
        }
示例#7
0
        static void ExampleUsingFormatter()
        {
            string imageContentFile = WORKING_DIR + @"\image_content_using_formatter.data";

            ChoiFormatter formatter = new ChoiFormatter(typeof(ContentContainer));

            // Example of reading an image file and serializing it into a single binary file
            using (var stream = new FileStream(imageContentFile, FileMode.Create, FileAccess.Write, FileShare.None))
                using (var buffer = new StreamByteBuffer(stream))
                    using (var context = new SerializationContext(buffer))
                    {
                        formatter.Serialize(stream, BuildSerializableEntity(context));
                    }

            // Example of deserializing an binary file
            using (var stream = new FileStream(imageContentFile, FileMode.Open, FileAccess.Read, FileShare.None))
            {
                ContentContainer data2 = (ContentContainer)formatter.Deserialize(stream);
            }
        }
示例#8
0
        static void Main(string[] args)
        {
            string dataFile = Directory.GetCurrentDirectory() + @"\..\..\..\sample.data";

            // Generating binary file using file streams
            using (var stream = new FileStream(dataFile, FileMode.Create, FileAccess.Write, FileShare.None))
                using (var buffer = new StreamByteBuffer(stream))
                {
                    // input string type data
                    buffer.Put("string data", 10)
                    // input int type
                    .Put(1)
                    // input long type
                    .Put(1L)
                    // input float type
                    .Put(1F)
                    // input null bytes
                    .PutNull(2)
                    // input single byte
                    .Put((byte)0x00)
                    // input bytes
                    .Put(new byte[] { 0x00, 0x01 });
                }

            // Reading binary file using file stream
            using (var stream = new FileStream(dataFile, FileMode.Open, FileAccess.Read, FileShare.None))
                using (var buffer = new StreamByteBuffer(stream))
                {
                    // get string type
                    var data1 = buffer.Get <string>(10);
                    // get int type
                    var data2 = buffer.Get <int>();
                    // get long type
                    var data3 = buffer.Get <long>();
                    // get float type
                    var data4 = buffer.Get <float>();
                    // get bytes
                    var data5 = buffer.Get(2);
                    // get single byte
                    var data6 = buffer.Get();
                    // get bytes
                    var data7 = buffer.Get(2);
                }



            // Generating binary file
            using (var buffer = new InMemoryByteBuffer())
            {
                // input string type data
                buffer.Put("string data", 10)
                // input int type
                .Put(1)
                // input long type
                .Put(1L)
                // input float type
                .Put(1F)
                // input null bytes
                .PutNull(2)
                // input single byte
                .Put((byte)0x00)
                // input bytes
                .Put(new byte[] { 0x00, 0x01 });

                File.WriteAllBytes(dataFile, buffer.ToArray());
            }

            // Reading binary files
            using (var buffer = new InMemoryByteBuffer(File.ReadAllBytes(dataFile)))
            {
                // get string type
                var data1 = buffer.Get <string>(10);
                // get int type
                var data2 = buffer.Get <int>();
                // get long type
                var data3 = buffer.Get <long>();
                // get float type
                var data4 = buffer.Get <float>();
                // get bytes
                var data5 = buffer.Get(2);
                // get single byte
                var data6 = buffer.Get();
                // get bytes
                var data7 = buffer.Get(2);
            }
        }