javax.activation.DataSource大小问题

javax.activation.DataSource大小问题,java,datasource,filesize,Java,Datasource,Filesize,如何获得(特别是-)所消耗的物理内存量?我使用javax.mail.util.ByteArrayDataSource(byte[]bytes,字符串类型)构造函数,其中我得到bytes如下: String str = "test"; byte[] bytes = str.getBytes(); 那会是str.length()字节吗?还有其他想法吗?str.length()将给出字符数 bytes.length将给出实际的字节数 根据您的活动角色集,这可能相同,也可能不同。某些字符被编码为多个字

如何获得(特别是-)所消耗的物理内存量?我使用
javax.mail.util.ByteArrayDataSource(byte[]bytes,字符串类型)
构造函数,其中我得到
bytes
如下:

String str = "test";
byte[] bytes = str.getBytes();
那会是
str.length()
字节吗?还有其他想法吗?

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. 1.
4不清楚你在问什么

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


但是您真正想做什么呢?

Java字符串总是每个字符消耗2个字节(加上一点内部开销),因为Java字符是2个字节,并且内存中的编码实际上总是UCS-2。