#java #stringbuffer
#java #stringbuffer
Вопрос:
Как я могу в Java преобразовать StringBuffer в массив байтов?
Комментарии:
1. можете ли вы просто выполнить String.valueOf(StringBuffer).getBytes()?
2. Обязательно укажите кодировку с
getBytes
помощью … «Кодирует эту строку в последовательность байтов, используя кодировку платформы по умолчанию …» Это одна из глупых областей, где они просто не выбрали универсальное значение по умолчанию.
Ответ №1:
Лучшей альтернативой было бы stringBuffer.toString().getBytes()
Лучше, потому String.valueOf(stringBuffer)
что в свою очередь вызывает stringBuffer.toString()
. Прямой вызов stringBuffer.toString().getBytes()
сэкономит вам один вызов функции и сравнение с equals null
.
Вот java.lang.String
реализация valueOf
метода:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
Ответ №2:
Я говорю, что у нас есть ответ от Грега:
String.valueOf(stringBuffer).getBytes()
Комментарии:
1. сначала будет произведена репликация буфера. Если входной StringBuffer имеет размер 1 МБ, то вы создадите еще один объект размером 1 МБ, а затем преобразуете его в байты. Не очень хорошее решение.
2. @chendu какое решение вы рекомендуете?
3. @Eric У меня нет чистого решения. Возможно, нам не следует использовать строковый буфер. Ближайшим грязным решением является доступ к переменной StringBuffer:
private transient char[] toStringCache;
через отражения и копирование ее в переменную класса Stringprivate final char[] value;