确定HTTP响应的大小?

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

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

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

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

以下是响应标头的示例:

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

检查一下: 标题字段定义

这似乎是你正在寻找的:

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

假设使用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获得的任何东西。

迟到总比不到好,对吧?

我最终找到了一种方法来获得我想要的东西:

 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); 

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