如何获取DataSource
(特别是 - ByteArrayDataSource
)消耗的物理内存量?我使用javax.mail.util.ByteArrayDataSource (byte[] bytes, String type)
构造函数,我得到bytes
,如下所示:
String str = "test";
byte[] bytes = str.getBytes();
那是str.length()
的字节数吗?还有其他想法吗?
答案 0 :(得分: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
答案 1 :(得分:1)
目前尚不清楚你在问什么。
byte[]
消耗的字节数就是它的长度:bytes.length
内存中由Java String
消耗的字节数是每个字符2个字节,因为在内存中它被编码为UCS-2:2*str.length()
String
序列化为byte[]
时消耗的字节数取决于您选择的字符编码。您必须将其序列化并检查。
但是你真正想做什么?