EDIT: вызов toString()
всегда создаст новую строку ... хотя ему не нужно копировать фактические символьные данные, просто создайте новую строку, ссылающуюся на текущий char[]
с текущей длиной и количеством. Для вызова getBuffer().length()
не нужно создавать каких-либо дополнительных объектов, так что это немного более эффективно.
Что вы делаете с выводом? Разве вы не конвертируете его в строку в любом случае?
Обратите внимание, что длина здесь всегда будет длиной в символов , поэтому она не подходит для чего-то вроде заголовка Content-Length HTTP-ответов, для которого необходимо значение в байты (т.е. после кодирования).
РЕДАКТИРОВАТЬ: Хорошо, если вы хотите вместо этого счетчик байтов, я предлагаю вам создать ByteArrayOutputStream
и либо передать его напрямую JAXB, если вы можете (я забыл, как выглядит API), либо создать OutputStreamWriter
вокруг него. Таким образом, вместо ByteArrayOutputStream
вы можете получить бинарную длину.