получить длину строки в StringWriter? - PullRequest
1 голос
/ 19 сентября 2010

Я использую JAXB, мне нужно знать длину сгенерированного XML, поэтому я упорядочиваю содержимое до StringWriter, поэтому какой путь лучше получить длину:

aStringWriter.getBuffer().length();
 or

aStringWriter.toString().length();
?

Ответы [ 2 ]

4 голосов
/ 19 сентября 2010

EDIT: вызов toString() всегда создаст новую строку ... хотя ему не нужно копировать фактические символьные данные, просто создайте новую строку, ссылающуюся на текущий char[] с текущей длиной и количеством. Для вызова getBuffer().length() не нужно создавать каких-либо дополнительных объектов, так что это немного более эффективно.

Что вы делаете с выводом? Разве вы не конвертируете его в строку в любом случае?

Обратите внимание, что длина здесь всегда будет длиной в символов , поэтому она не подходит для чего-то вроде заголовка Content-Length HTTP-ответов, для которого необходимо значение в байты (т.е. после кодирования).

РЕДАКТИРОВАТЬ: Хорошо, если вы хотите вместо этого счетчик байтов, я предлагаю вам создать ByteArrayOutputStream и либо передать его напрямую JAXB, если вы можете (я забыл, как выглядит API), либо создать OutputStreamWriter вокруг него. Таким образом, вместо ByteArrayOutputStream вы можете получить бинарную длину.

1 голос
/ 19 сентября 2010

Я делаю это

Charset UTF8Charset = Charset.forName("UTF8");
String output = stringWriter.toString();
response.setContentType("application/xml");
response.setContentLength(output.getBytes(UTF8Charset).length);
PrintWriter out = response.getWriter();
out.print(output);

Прекрасно работает для всех струн UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...