2010-06-02 16 views
0

Comment puis-je obtenir la quantité de mémoire physique, consommée par le DataSource (spécifiquement - ByteArrayDataSource)? J'utilise constructeur javax.mail.util.ByteArrayDataSource (byte[] bytes, String type), où je reçois bytes comme ceci:javax.activation.DataSource size question

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

Serait-ce str.length() en octets? D'autres idées?

Répondre

2

str.length() donnera le nombre de caractères

bytes.length donnera le nombre réel d'octets.

Selon votre jeu de caractères actif, cela peut être différent ou non. Certains caractères sont codés sous la forme d'octets multiples.

exemple:

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

} 

retours

+0

Les Java Strings consomment toujours 2 octets par caractère (enfin, plus un petit surcoût interne) puisque les caractères Java ont 2 octets et que le codage en mémoire est effectivement toujours UCS-2. –

1

Il est pas clair ce que vous demandez.

Le nombre d'octets consommés par un byte[] est juste sa longueur: bytes.length Le nombre d'octets consommés, en mémoire, par un Java String, est de 2 octets par caractère, étant donné que dans la mémoire, il est codé comme UCS-2: 2*str.length() Le nombre d'octets consommés par un String, lorsqu'il est sérialisé sur un byte[], dépend du codage de caractères que vous sélectionnez. Vous devrez le sérialiser et vérifier.

Mais qu'essayez-vous vraiment de faire?