首先,如果我的术语有点业余,我很抱歉,试着忍受我;)
我试图将HTTP响应的gzipped主体转换为明文.我已经采用了这个响应的字节数组并将其转换为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);
}
Run Code Online (Sandbox Code Playgroud) 正如我在上一个问题中描述的那样,我有一个编写代理服务器的任务.它现在部分工作,但我仍然有处理gzip信息的问题.我将HttpResponse存储在一个字符串中,看起来我不能用gzip压缩内容.但是,标题是我需要解析的文本,它们都来自同一个文本InputStream.我的问题是,为了正确处理二进制响应,我还需要做什么,同时仍然将头解析为字符串?
>>在查看代码之前,请参阅下面的编辑.
这是Response类实现:
public class Response {
private String fullResponse = "";
private BufferedReader reader;
private boolean busy = true;
private int responseCode;
private CacheControl cacheControl;
public Response(String input) {
this(new ByteArrayInputStream(input.getBytes()));
}
public Response(InputStream input) {
reader = new BufferedReader(new InputStreamReader(input));
try {
while (!reader.ready());//wait for initialization.
String line;
while ((line = reader.readLine()) != null) {
fullResponse += "\r\n" + line;
if (HttpPatterns.RESPONSE_CODE.matches(line)) {
responseCode = (Integer) HttpPatterns.RESPONSE_CODE.process(line);
} else if …Run Code Online (Sandbox Code Playgroud)