Получить размер строки с кодировкой в байтах без преобразования в байт []
У меня есть ситуация, когда мне нужно знать размерString
/ кодирование, в байтах, но не может использоватьgetBytes()
метод, потому что 1)String
очень большой и дублируетString
вbyte[]
массив будет использовать большой объем памяти, но ближе к пункту 2)getBytes()
выделяетbyte[]
массив на основе длиныString
* максимально возможные байты на символ. Так что если у меня естьString
с 1.5B символами и кодировкой UTF-16,getBytes()
попытается выделить массив из 3 ГБ и потерпит неудачу, поскольку массивы ограничены 2 ^ 32 - X байтами (X зависит от версии Java).
Итак, есть ли способ рассчитать размер байтаString
/ кодирующая пара непосредственно изString
объект?
ОБНОВИТЬ:
Вот's рабочая реализация jtahlborn 'ответ:
private class CountingOutputStream extends OutputStream {
int total;
@Override
public void write(int i) {
throw new RuntimeException("don't use");
}
@Override
public void write(byte[] b) {
total += b.length;
}
@Override public void write(byte[] b, int offset, int len) {
total += len;
}
}