我该如何像这样的Java代码片段那样在c#中解压缩流?

时间:2019-06-28 08:51:41

标签: java c# gzip gzipstream

我正在尝试在C#中转换此Java代码段代码,但对此有些困惑。 这是Java代码:

下面是我的尝试,但是出于相同的原因,在gis.Read中有一些错误,因为它需要char *而不是byte []和String构造函数。

public static String decompress(InputStream input) throws IOException 
{
    final int BUFFER_SIZE = 32;
    GZIPInputStream gis = new GZIPInputStream(input, BUFFER_SIZE);
    StringBuilder string = new StringBuilder();
    byte[] data = new byte[BUFFER_SIZE];
    int bytesRead;
    while ((bytesRead = gis.read(data)) != -1) {
        string.append(new String(data, 0, bytesRead));
    }
    gis.close();
    // is.close();
    return string.toString();
}

我希望得到一个可读的字符串。

1 个答案:

答案 0 :(得分:2)

您需要先将字节转换为字符。为此,您需要了解编码。

在您的代码中,您可以将new String(data, 0, bytesRead)替换为Encoding.UTF8.GetString(data, 0, bytesRead)来完成。但是,我会稍有不同。

StreamReader是一个有用的类,用于在C#中读取字节作为文本。只需将其包裹在GZipStream周围,然后使其神奇即可。

public static string Decompress(Stream input)
{
    // note this buffer size is REALLY small. 
    // You could stick with the default buffer size of the StreamReader (1024)
    const int BUFFER_SIZE = 32;
    string result = null;
    using (var gis = new GZipStream(input, CompressionMode.Decompress, leaveOpen: true))
    using (var reader = new StreamReader(gis, Encoding.UTF8, true, BUFFER_SIZE))
    {
        result = reader.ReadToEnd();
    }

    return result;
}