确定HTTP响应的大小?

时间:2011-03-25 16:35:22

标签: java io httpresponse

有没有办法确定HTTPServletResponse内容的大小?我读了get-size-of-http-response-in-java这个问题,但遗憾的是我工作的地方无法访问CommonsIO :(

响应内容由单个复杂对象组成,因此我考虑将其写入临时文件,然后检查该文件。当应用程序在生产中运行时,这不是我想要做的诊断,但是如果可能的话就想避免它。

PS我读了erickson的答案但它提到了输入流我想知道正在写出的对象的大小...如果writeObject()方法返回一个表示写入的字节而不是{{}的数字,那将非常好1}} ...

4 个答案:

答案 0 :(得分:10)

如果您有权访问响应标头,则可以阅读Content-Length

以下是响应标头的示例:

(Status-Line):HTTP/1.1 200 OK
Connection:Keep-Alive
Date:Fri, 25 Mar 2011 16:26:56 GMT
Content-Length:728

检查出来:Header Field Definitions

答案 1 :(得分:0)

This似乎就是你要找的东西:

DataOutputStream dos = new DataOutputStream(response.getOutputStream());
...
int len = dos.size();

答案 2 :(得分:0)

假设使用ObjectOutputStream,请围绕java.io.ByteArrayOutputStream

进行构建
ByteArrayOutputStream contentBytes = new ByteArrayOutputStream();

ObjectOutputStream objectOut = new ObjectOutputStream(contentBytes);

objectOut.writeObject(content);

int contentLength = contentBytes.size();

然后您可以使用

发送内容
contentBytes.writeTo(connection.getOutputStream());

其中connection是您从OutputStream获得的任何内容。

迟到总比没有好,对吧?

答案 3 :(得分:-3)

我最终找到了获得我想要的方法:

URLConnection con = servletURL.openConnection();
BufferedInputStream bif = new BufferedInputStream(con.getInputStream());
ObjectInputStream input = new ObjectInputStream(bif);
int avail = bif.available();

System.out.println("Response content size = " + avail);

这让我可以看到客户端上的响应大小。我仍然想知道它在发送之前在服务器端是什么,但这是下一个最好的事情。