javax.activation.DataSource размер вопроса - PullRequest
0 голосов
/ 02 июня 2010

Как получить объем физической памяти, потребляемый DataSource (в частности - ByteArrayDataSource)? Я использую javax.mail.util.ByteArrayDataSource (byte[] bytes, String type) конструктор, где я получаю bytes так:

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

Это будет str.length() в байтах? Есть другие идеи?

Ответы [ 2 ]

2 голосов
/ 02 июня 2010

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);

}

1010 * возвращается *

4 4 1 4

1 голос
/ 02 июня 2010

Непонятно, о чем вы спрашиваете.

Количество байтов, потребляемых byte[], равно его длине: bytes.length Число байтов, потребляемых в памяти Java String, составляет 2 байта на символ, поскольку в памяти оно кодируется как UCS-2: 2*str.length() Количество байтов, потребляемых String при сериализации до byte[], зависит от выбранной кодировки символов. Вам придется сериализовать его и проверить.

Но что вы действительно пытаетесь сделать?

...