javax.activation.DataSource 大小问题

Posted

技术标签:

【中文标题】javax.activation.DataSource 大小问题【英文标题】:javax.activation.DataSource size question 【发布时间】:2010-06-02 11:20:52 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

Java 字符串总是每个字符消耗 2 个字节(好吧,加上一点内部开销),因为 Java char 是 2 个字节,并且内存中的编码实际上总是 UCS-2。【参考方案2】:

不清楚你在问什么。

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

但你真正想做什么?

【讨论】:

以上是关于javax.activation.DataSource 大小问题的主要内容,如果未能解决你的问题,请参考以下文章