Stream have diffrent size while debugging

Posted on 2009-07-01
Last Modified: 2012-05-07

I have a TestMethod to compare 2 streams using their bytes. here is part of the code (see code)

When debug this test then it pass, but when i just run it then i get the length differ fail assertion.

what is wrong in this code?
byte[] actual;

 byte[] expectedbytes;

using (MemoryStream actualstream = GenerateDocument(document, null, MpFunctionCode.NWPOF))


                    actualstream.Position = 0;

                    actual = actualstream.ToArray();



using (Stream expected = typeof(GeneratorTest).Assembly.GetManifestResourceStream("Generator.UnitTests.resources.ExpectedOutput.pdf"))


                expected.Position = 0;

                expectedbytes = WriteToByte(expected, (int)expected.Length);



AssertEqual(actual, expectedbytes);

private static void AssertEqual(byte[] actual, byte[] expectedbytes)


            if (actual.Length != expectedbytes.Length)

                Assert.Fail("Length differ:    Actual: " + actual.Length + "        Expected: " + expectedbytes.Length);

            for (int i = 0; i < expectedbytes.Length; i++)


                if (expectedbytes[i] != actual[i])

                    Assert.Fail("Not the same: " + actual[i] + " " + expectedbytes[i] + " index: " + i);



private static byte[] WriteToByte(Stream stream, int initialLength)


            stream.Position = 0;

            // If we've been passed an unhelpful initial length, just

            // use 32K.

            if (initialLength < 1)


                initialLength = 32768;


            byte[] buffer = new byte[initialLength];

            int read = 0;

            int chunk;

            while ((chunk = stream.Read(buffer, read, buffer.Length - read)) > 0)


                read += chunk;

                // If we've reached the end of our buffer, check to see if there's

                // any more information

                if (read == buffer.Length)


                    int nextByte = stream.ReadByte();

                    // End of stream? If so, we're done

                    if (nextByte == -1)


                        return buffer;


                    // Nope. Resize the buffer, put in the byte we've just

                    // read, and continue

                    byte[] newBuffer = new byte[buffer.Length * 2];

                    Array.Copy(buffer, newBuffer, buffer.Length);

                    newBuffer[read] = (byte)nextByte;

                    buffer = newBuffer;




            // Buffer is now too big. Shrink it.

            byte[] ret = new byte[read];

            Array.Copy(buffer, ret, read);


            return ret;


Open in new window

Question by:kimos123
1 Comment

Accepted Solution

kimos123 earned 0 total points
ID: 24761059
nvm delete this

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
WKHTMLTOPDF - --disable-smart-shrinking not working 10 32
Excel file not created as expected 7 46
Class object 2 26
Connection String 16 43
This article describes a simple method to resize a control at runtime.  It includes ready-to-use source code and a complete sample demonstration application.  We'll also talk about C# Extension Methods. Introduction In one of my applications…
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
A short film showing how OnPage and Connectwise integration works.
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

914 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now