Search code examples
c#stringcompression

Compression and decompression of text


I am trying to use some libraries to compress and decompress a string in C#. I am still relatively new to this but I would expect that if I am using the same library to compress and decompress, there should not be any issues. The string I am trying to compress is basically like an XML like type structure.

I am receiving an exception as follows when trying to decompress the compressed data: System.IO.InvalidDataException: 'The archive entry was compressed using an unsupported compression method.' This exception is being encountered on this line in my code: gzip.CopyTo(decompressedStream);

My whole program code can be seen below:

using System.IO.Compression;
using System.Text;

namespace StringCompression
{
    class Program
    {
        static void Main(string[] args)
        {
            #region
            string xml = "< RadelNodeTestCase >    < RadelNodeTests >      < RadelNodeTest >        < digitalOutputs />        < switchCurrents />        < PostDigitalOutputControl />        < digitalOutputValidation />        < expectedDigitalInputs />        < actualDigitalInputs />        < Name > Initialisation </ Name >        < IdNumber > LRU3 Test </ IdNumber >        < IdNumbers >          < string > LRU3 Test </ string >        </ IdNumbers >        < Revisions />        < Comment > Checks the initial state of the unit</Comment>        <NoVoltageMeasurementFlag>false</NoVoltageMeasurementFlag>        <UserPrompt>Re-connect power</UserPrompt>        <Outcome>PASS</Outcome>        <VoltageMeasurements>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>R</wireNo>            <testPoint>A2</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>S</wireNo>            <testPoint>A3</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>T</wireNo>            <testPoint>A4</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>U</wireNo>            <testPoint>A5</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>V</wireNo>            <testPoint>A6</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0.001</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>W</wireNo>            <testPoint>A7</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>X</wireNo>            <testPoint>A8</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>Y</wireNo>            <testPoint>A9</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0.011</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>b</wireNo>            <testPoint>A10</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0.001</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>d</wireNo>            <testPoint>A11</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0.001</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>e</wireNo>            <testPoint>A12</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0.011</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>f</wireNo>            <testPoint>A13</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>g</wireNo>            <testPoint>A14</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0.01</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>h</wireNo>            <testPoint>A15</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>j</wireNo>            <testPoint>A16</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0.012</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>k</wireNo>            <testPoint>A17</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>m</wireNo>            <testPoint>A18</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0.012</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>n</wireNo>            <testPoint>A19</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>p</wireNo>            <testPoint>A20</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0.01</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>q</wireNo>            <testPoint>A21</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>r</wireNo>            <testPoint>A22</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>s</wireNo>            <testPoint>A23</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>t</wireNo>            <testPoint>A24</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>u</wireNo>            <testPoint>A25</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>v</wireNo>            <testPoint>A26</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0.012</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C750</connector>            <wireNo>w</wireNo>            <testPoint>A27</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C780</connector>            <wireNo>J</wireNo>            <testPoint>A28</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C780</connector>            <wireNo>H</wireNo>            <testPoint>A29</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C780</connector>            <wireNo>G</wireNo>            <testPoint>A30</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C760</connector>            <wireNo>K</wireNo>            <testPoint>A31</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C760</connector>            <wireNo>J</wireNo>            <testPoint>A32</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C760</connector>            <wireNo>H</wireNo>            <testPoint>A33</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C760</connector>            <wireNo>E</wireNo>            <testPoint>A34</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C760</connector>            <wireNo>C</wireNo>            <testPoint>A35</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>          <VoltageMeasurement>            <connector>C760</connector>            <wireNo>A</wireNo>            <testPoint>A36</testPoint>            <connectorRef>C750</connectorRef>            <wireNoRef>f</wireNoRef>            <testPointRef>A13</testPointRef>            <NumberOfSamples>1</NumberOfSamples>            <Min>-0.5</Min>            <Max>0.5</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </VoltageMeasurement>        </VoltageMeasurements>        <ExpectedActiveSpos />        <ActualActiveSpos />        <InactiveSpos />        <SposCheckPass>true</SposCheckPass>        <ExpectedCanMessagesReceived>true</ExpectedCanMessagesReceived>        <ConnectionTests />        <VoltageImports />        <MeasuredHighOutputs />        <ExpectedHighOutputs />        <SposHighOutputs />        <digitalOutputValidationPassed>false</digitalOutputValidationPassed>        <AnalogInputs>          <AnalogInput>            <CanId>177</CanId>            <Number>1</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>2</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>3</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>4</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>5</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>6</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>7</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>8</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>9</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>10</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0.02</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>11</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>12</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>13</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0.02</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>14</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>15</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>16</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>17</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>18</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>19</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>20</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>21</Number>            <Min>0</Min>            <Max>30</Max>            <Measurement>0.34</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>177</CanId>            <Number>22</Number>            <Min>0</Min>            <Max>25</Max>            <Measurement>24.37</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>178</CanId>            <Number>1</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>178</CanId>            <Number>2</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>178</CanId>            <Number>3</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>          <AnalogInput>            <CanId>178</CanId>            <Number>4</Number>            <Min>0</Min>            <Max>2</Max>            <Measurement>0</Measurement>            <Outcome>PASS</Outcome>          </AnalogInput>";
            #endregion

            string result;
            
            byte[] xmlBytes = Encoding.UTF8.GetBytes(xml);
            using (var stream = new MemoryStream())
            using (var gzip = new GZipStream(stream, CompressionMode.Compress))
            {
                gzip.Write(xmlBytes, 0, xmlBytes.Length);
                gzip.Close();

                byte[] compressed = stream.ToArray();
                result = Encoding.UTF8.GetString(compressed);
                Console.WriteLine($"Compressed size: {compressed.Length} bytes");
                Console.WriteLine($"Original size: {xmlBytes.Length} bytes");
            }

            string compressedString = result;
            byte[] compressedBytes = Encoding.UTF8.GetBytes(compressedString);
            using (var compressedStream = new MemoryStream(compressedBytes))
            using (var decompressedStream = new MemoryStream())
            using (var gzip = new GZipStream(compressedStream, CompressionMode.Decompress))
            {
                gzip.CopyTo(decompressedStream);
                byte[] decompressedBytes = decompressedStream.ToArray();
                string decompressedString = Encoding.UTF8.GetString(decompressedBytes);
                Console.WriteLine($"Decompressed string size: {decompressedString.Length}");
            }
        }
    }
}

I tried to compress the data using the GZip library, and I believe the data is being compressed correctly because the size if significantly reduced. However when I try to decompress the data, I am experiencing issues.

Any assistance is appreciated, sorry if this is a trivial task, I am still kind of getting to grips with this.


Solution

  • You compression/decompression code is fine, the issue is in the compression result representation.

    You use Encoding.UTF8.GetString(compressed), but gzip does not guarantee that the resulting byte sequence is a valid UTF8 string, so doing Encoding.UTF8.GetBytes later results in a different byte array.

    So you either have to change the way you represent the result of compression, or keep it as a byte array.

    Base64 encoding is often used to represent byte sequences as a string, so if you use Convert.ToBase64String and Convert.FromBase64String this code should work.