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); }
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); } }