我有一种情况,我需要知道String
/encoding 对的大小(以字节为单位),但不能使用该getBytes()
方法,因为 1)String
非常大并且String
在byte[]
数组中复制会使用大量内存,但更多的是第 2 点)根据每个字符的最大可能字节的长度getBytes()
分配一个byte[]
数组。String
因此,如果我有String
1.5B 字符和 UTF-16 编码,getBytes()
将尝试分配 3GB 数组并失败,因为数组限制为 2^32 - X 字节(X 是特定于 Java 版本的)。
那么 - 有没有办法String
直接从String
对象计算 /encoding 对的字节大小?
更新:
这是 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;
}
}