我使用以下代码下载大小为51kb的露天HTML内容
HttpGet httpget = new HttpGet(url);
System.out.println("executing request" + httpget.getRequestLine());
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
System.out.println("----------------------------------------");
if (entity != null) {
System.out.println("Response content type: " + entity.getContentType());
long contentLength = entity.getContentLength();
System.out.println("Response content length: "+ entity.getContentLength());
if (contentLength > 0) {
b = new byte[(int) contentLength];
entity.getContent().read(b);
content=new String(b);
content=content.replace("\n", "").replace("\r", "");
//content = StringEscapeUtils.escapeHtml(content);
System.out.println("Response content: " + content);
}
}
只下载并显示30-40%的HTML内容。我无法获得完整的内容。
我尝试增加b的字节大小。但没有什么能帮助我。
请帮我用java代码下载alfresco内容。任何帮助表示赞赏。提前谢谢。
答案 0 :(得分:2)
读取InputStream并不总是返回整个内容。您需要在循环中读取InputStream
并写入缓冲区的正确偏移量,并根据read()
的返回值递增偏移量。例如:
byte[] b = new byte[(int)contentLength];
int offset = 0;
while(offset < contentLength) {
offset += inputStream.read(b, offset, b.length - offset);
}
String content = new String(b); // Or specify encoding.
或者您可以使用像Apache Commons IO这样的库。那就是:
IOUtils.toString(entity.getContent(), encoding);