相关疑难解决方法(0)

计算Java String的UTF-8长度而不实际编码它

有谁知道标准Java库(任何版本)是否提供了一种计算字符串二进制编码长度的方法(在本例中为UTF-8)而不实际生成编码输出?换句话说,我正在寻找一个有效的等价物:

"some really long string".getBytes("UTF-8").length
Run Code Online (Sandbox Code Playgroud)

我需要为潜在的长序列化消息计算长度前缀.

java utf-8

40
推荐指数
2
解决办法
2万
查看次数

以字节为单位获取String w/encoding的大小而不转换为byte []

我有一种情况,我需要知道一个String/编码对的大小,以字节为单位,但不能使用该getBytes()方法,因为1)String非常大并且复制String在一个byte[]数组中将使用大量的内存,但更多的是第2点)根据*每个字符的最大可能字节长度getBytes()分配一个byte[]数组String.因此,如果我有String1.5B字符和UTF-16编码,getBytes()将尝试分配3GB数组并失败,因为数组限制为2 ^ 32 - X字节(X是特定于Java版本).

那么 - 有没有办法String直接从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;
    }
}
Run Code Online (Sandbox Code Playgroud)

java string size byte

17
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×2

byte ×1

size ×1

string ×1

utf-8 ×1