Определить размер ответа HTTP? - PullRequest
4 голосов
/ 25 марта 2011

Есть ли способ определить размер контента HTTPServletResponse?Я прочитал этот get-size-of-http-response-in-java вопрос, но, к сожалению, там, где я работаю, у меня нет доступа к CommonsIO: (

Содержание ответа состоит из одногосложный объект, поэтому я подумал о том, чтобы записать его во временный файл и затем проверить этот файл. Это не то, чем я хочу заниматься в качестве диагностики, пока приложение работает в рабочей среде, хотя, поэтому, если это вообще возможно, нужно избегать его.

PS Я прочитал ответ Эриксона, но в нем упоминались входные потоки. Я хочу знать размер записываемого объекта ... Было бы здорово, если бы метод writeObject() возвратил число, представляющее записанные байты вместо void ...

Ответы [ 4 ]

11 голосов
/ 25 марта 2011

Если у вас есть доступ к заголовку ответа, вы можете прочитать Content-Length.

Вот пример заголовка ответа:

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

Проверьте это: Определения полей заголовка

0 голосов
/ 13 февраля 2013

Предполагая использование 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.

Лучше поздно, чем никогда, верно?

0 голосов
/ 28 марта 2011

В конце концов я нашел способ получить то, что хотел:

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

Это позволило мне увидеть размер ответа на клиенте. Я все еще хотел бы знать, что это на стороне сервера, прежде чем он будет отправлен, но это была следующая лучшая вещь.

0 голосов
/ 25 марта 2011

Это , кажется, то, что вы ищете:

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