Ejemplo n.º 1
0
        public static void generateTwoBitDataAndSend(Stream outputStream, long dataSize, bool compressed, double[] ratios = null)
        {
            int         bufferSize = 1024 * 1024; // 1024 KB
            long        chunkNum   = dataSize / bufferSize;
            int         extraBytes = (int)dataSize % bufferSize;
            List <byte> data       = new List <byte>();


            MemoryStream memStream  = new MemoryStream();
            GZipStream   gzipStream = new GZipStream(memStream, CompressionMode.Compress, true);
            var          databuffer = new byte[1];

            int bitIndex = 0;
            int oneByte  = 0;

            char[]   randomCharBuffer = new char[1];
            double[] randomCharRatios;

            if (ratios != null)
            {
                randomCharRatios = ratios;
            }
            else
            {
                randomCharRatios = randomRatios(specialChars.Length);
            }
            byte[] buffer;


            for (int index = 0; index < chunkNum; index++)
            {
                StringBuilder textData = new StringBuilder();
                GenerateRandomeData(textData, bufferSize, randomCharRatios);
                randomCharBuffer = textData.ToString().ToCharArray();

                for (int byteIndex = 0; byteIndex < bufferSize; byteIndex++)
                {
                    char oneChar = randomCharBuffer[byteIndex];
                    oneByte   = oneByte | FormatData.charCodeToByte(oneChar) << bitIndex;
                    bitIndex += 2;
                    if (bitIndex == 8)
                    {
                        data.Add((byte)oneByte);
                        bitIndex = 0;
                        oneByte  = 0;
                    }
                }

                buffer = data.ToArray();
                data.Clear();
                if (compressed)
                {
                    gzipStream.Write(buffer, 0, (int)buffer.Length);
                }
                else
                {
                    memStream.Write(buffer, 0, (int)buffer.Length);
                }
                databuffer = memStream.ToArray();
                outputStream.Write(databuffer, 0, databuffer.Length);
                memStream.Seek(0, SeekOrigin.Begin);
                memStream.SetLength(0);
                memStream.Capacity = 10;
            }

            if (extraBytes > 0)
            {
                StringBuilder textData = new StringBuilder();
                GenerateRandomeData(textData, extraBytes, randomCharRatios);
                randomCharBuffer = textData.ToString().ToCharArray();

                for (int byteIndex = 0; byteIndex < extraBytes; byteIndex++)
                {
                    char oneChar = randomCharBuffer[byteIndex];
                    oneByte   = oneByte | FormatData.charCodeToByte(oneChar) << bitIndex;
                    bitIndex += 2;
                    if (bitIndex == 8)
                    {
                        data.Add((byte)oneByte);
                        bitIndex = 0;
                        oneByte  = 0;
                    }
                }
            }
            if (bitIndex > 0)
            {
                data.Add((byte)oneByte);
            }
            else
            {
                bitIndex = 8;
            }
            buffer = data.ToArray();
            data.Clear();

            if (compressed)
            {
                gzipStream.Write(buffer, 0, (int)buffer.Length);
                writeBitsComplement(gzipStream, bitIndex);
            }
            else
            {
                memStream.Write(buffer, 0, (int)buffer.Length);
            }
            long currentpos = memStream.Position;
            long length     = memStream.Length;


            if (compressed)
            {
                gzipStream.Flush();
                gzipStream.Close();
            }



            databuffer = memStream.ToArray();
            outputStream.Write(databuffer, 0, databuffer.Length);
        }
Ejemplo n.º 2
0
        public static void generateTwoBitDataAndSend(Stream outputStream, long dataSize)
        {
            int         bufferSize = 512 * 1025; // 512 KB
            long        chunkNum   = dataSize / bufferSize;
            int         extraBytes = (int)dataSize % bufferSize;
            List <byte> data       = new List <byte>();


            MemoryStream memStream        = new MemoryStream();
            GZipStream   gzipStream       = new GZipStream(memStream, CompressionMode.Compress, true);
            var          compressedbuffer = new byte[1];

            int bitIndex = 0;
            int oneByte  = 0;

            char[] randomCharBuffer = new char[1];
            initRandomCharBuffer(ref randomCharBuffer, ' ');
            for (int index = 0; index < chunkNum; index++)
            {
                for (int byteIndex = 0; byteIndex < bufferSize; byteIndex++)
                {
                    int  charIndex = rand.Next() % randomCharBuffer.Length;
                    char oneChar   = randomCharBuffer[charIndex];
                    oneByte   = oneByte | FormatData.charCodeToByte(oneChar) << bitIndex;
                    bitIndex += 2;
                    if (bitIndex == 8)
                    {
                        data.Add((byte)oneByte);
                        bitIndex = 0;
                        oneByte  = 0;
                    }
                }

                byte[] buffer = data.ToArray();
                data.Clear();
                gzipStream.Write(buffer, 0, (int)buffer.Length);
                compressedbuffer = memStream.ToArray();
                outputStream.Write(compressedbuffer, 0, compressedbuffer.Length);
                memStream.Seek(0, SeekOrigin.Begin);
                memStream.SetLength(0);
                memStream.Capacity = 10;
            }

            if (extraBytes > 0)
            {
                for (int byteIndex = 0; byteIndex < extraBytes; byteIndex++)
                {
                    int  charIndex = rand.Next() % randomCharBuffer.Length;
                    char oneChar   = randomCharBuffer[charIndex];
                    oneByte   = oneByte | FormatData.charCodeToByte(oneChar) << bitIndex;
                    bitIndex += 2;
                    if (bitIndex == 8)
                    {
                        data.Add((byte)oneByte);
                        bitIndex = 0;
                        oneByte  = 0;
                    }
                }

                if (bitIndex > 0)
                {
                    data.Add((byte)oneByte);
                }
                else
                {
                    bitIndex = 8;
                }
                byte[] buffer = data.ToArray();
                data.Clear();
                gzipStream.Write(buffer, 0, (int)buffer.Length);
                writeBitsComplement(gzipStream, bitIndex);

                gzipStream.Flush();
                gzipStream.Close();
                compressedbuffer = memStream.ToArray();
                outputStream.Write(compressedbuffer, 0, compressedbuffer.Length);
            }
        }