String
/encoding ペアのサイズをバイト単位で知る必要がある状況がありますが、1)が非常に大きく、配列内で複製すると大量のメモリが使用されるgetBytes()
ため、メソッドを使用できません。ポイント 2) * 文字ごとに可能な最大バイトの長さに基づいて配列を割り当てます。したがって、1.5B 文字と UTF-16 エンコーディングのがある場合、配列は 2^32 - X バイト (X は Java バージョン固有) に制限されているため、3GB 配列を割り当てようとして失敗します。String
String
byte[]
getBytes()
byte[]
String
String
getBytes()
だから -オブジェクトString
から直接 /encoding ペアのバイトサイズを計算する方法はありますか?String
アップデート:
これは、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;
}
}