GZIPInputStream转换为String


问题内容

首先,对不起,如果我的术语有点业余,请尝试忍受我;)

我正在尝试将HTTP响应的压缩后的正文转换为纯文本。我已将此响应的字节数组转换为ByteArrayInputStream。然后,我将其转换为GZIPInputStream。现在,我想读取GZIPInputStream并将最终解压缩的HTTP响应正文存储为纯文本字符串。

这段代码会将最终解压缩的内容存储在OutputStream中,但我想将内容存储为String:

public static int sChunk = 8192;
ByteArrayInputStream bais = new ByteArrayInputStream(responseBytes);
GZIPInputStream gzis = new GZIPInputStream(bais);
byte[] buffer = new byte[sChunk];
int length;
while ((length = gzis.read(buffer, 0, sChunk)) != -1) {
        out.write(buffer, 0, length);
}

问题答案:

要从InputStream解码字节,可以使用InputStreamReader。然后,BufferedReader将允许您逐行读取流。

您的代码如下所示:

ByteArrayInputStream bais = new ByteArrayInputStream(responseBytes);
GZIPInputStream gzis = new GZIPInputStream(bais);
InputStreamReader reader = new InputStreamReader(gzis);
BufferedReader in = new BufferedReader(reader);

String readed;
while ((readed = in.readLine()) != null) {
    System.out.println(readed);
}