繁体   English   中英

是否可以窥视HttpClient的org.apache.http.conn.EofSensorInputStream?

[英]Is it possible to peek HttpClient's org.apache.http.conn.EofSensorInputStream?

我试图从HttpClient查看输入流内容,最多64k字节。

该流来自HttpGet,没有什么不寻常之处:

HttpGet requestGet = new HttpGet(encodedUrl); HttpResponse httpResponse = httpClient.execute(requestGet); int status = httpResponse.getStatusLine().getStatusCode(); if (status == HttpStatus.SC_OK) { return httpResponse.getEntity().getContent(); }

它返回的输入流的类型为org.apache.http.conn.EofSensorInputStream

我们的用例是这样的,我们需要“窥视”输入流的第一个(最多64k)字节。 我使用此处描述的算法如何查看InputStream中的前两个字节?

PushbackInputStream pis = new PushbackInputStream(inputStream, DEFAULT_PEEK_BUFFER_SIZE); byte [] peekBytes = new byte[DEFAULT_PEEK_BUFFER_SIZE]; int read = pis.read(peekBytes); if (read < DEFAULT_PEEK_BUFFER_SIZE) { byte[] trimmed = new byte[read]; System.arraycopy(peekBytes, 0, trimmed, 0, read); peekBytes = trimmed; } pis.unread(peekBytes);

当我使用ByteArrayInputStream时,这没有问题。

问题:当使用org.apache.http.conn.EofSensorInputStream我只在流的开头获得少量字节。 通常大约400字节。 当我预计高达64k字节。

我也尝试使用BufferedInputStream ,我读取前64k字节,然后调用.reset()但这也不起作用。 同样的问题。

为什么会这样? 我认为没有任何东西正在关闭流,因为如果你调用IOUtils.toString(inputStream)我会得到所有的内容。

请参阅InputStream #read(byte [] b,int off,int len)合同:

将输入流中最多len个字节的数据读入一个字节数组。 尝试读取len个字节, 但可以读取较小的数字 实际读取的字节数以整数形式返回

而不是使用此方法,使用IOUtils.read读取,直到您获得循环中请求的字节数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM