У меня есть ситуация, когда мне нужно знать размер пары 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;
}
}