У меня есть ситуация, когда мне нужно знать размер пары String/encoding, в байтах, но не может использовать метод getBytes(), потому что 1) String очень большой и дублирует String в массиве byte[] будет использоваться большой объем памяти, но больше к точке 2) getBytes() выделяет массив byte[] на основе длины String * максимально возможных байтов на символ. Поэтому, если у меня есть String с символами 1.5B и кодировкой UTF-16, getBytes() будет пытаться выделить массив 3 ГБ и выйти из строя, поскольку массивы ограничены 2 ^ 32 - X байтами (X - спецификация Java).
Итак - есть ли способ вычислить размер байта пары String/encoding непосредственно из объекта String?
UPDATE:
Здесь рабочая реализация 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;
}
}