1

我如何获得DataSource(特别是 - ByteArrayDataSource)消耗的物理内存量?我使用javax.mail.util.ByteArrayDataSource (byte[] bytes, String type)构造函数,我得到bytes这样的:

String str = "test";
byte[] bytes = str.getBytes();

那会str.length()以字节为单位吗?还有其他想法吗?

4

2 回答 2

2

str.length() 将给出字符数

bytes.length 将给出实际的字节数。

根据您的活动字符集,这可能相同也可能不同。一些字符被编码为多个字节。

例子 :

public static void main(String[] args) {
    String s1 = "test";
    byte[] b1 = s1.getBytes();
    System.out.println(s1.length());
    System.out.println(b1.length);

    String s2 = "\u0177";
    byte[] b2 = s1.getBytes();
    System.out.println(s2.length());
    System.out.println(b2.length);

}

返回

4 4 1 4

于 2010-06-02T11:30:54.463 回答
1

不清楚你在问什么。

a 消耗的字节数byte[]就是它的长度:bytes.length Java 在内存中消耗的String字节数是每个字符 2 个字节,因为在内存中它被编码为 UCS-2:2*str.length() a 消耗的字节数String,当序列化为 a 时byte[],取决于您选择的字符编码。您必须对其进行序列化并检查。

但你真正想做什么?

于 2010-06-02T11:38:00.593 回答