IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

l' objet StringBuffer


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut l' objet StringBuffer
    Bonjour !

    J' étudie la classe StringBuffer. J' ei vu qu' il y a 3 constructeurs pour cette classe.

    Le constructeur StringBuffer() permet de construire un objet sans aucun caractère et avec une capacité initiale de 16 caractères. Bien !

    J' ai donc, dans un programme, mis les instructions suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    StringBuffer s1 = new StringBuffer();
    System.out.println("s1 = " + s1);
    System.out.println(s1.length() );
    for(int i = 0; i < 20; i++)
    {
    	s1.append(i);
    }
    System.out.println("s1 = " + s1);
    L' exécution de ce programme ne m' a pas permis de matérialiser cette notion de 16 caractères. Connaissez-vous une instruction capable de le faire ?

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    16 c'est la taille du buffer interne (qui est agrandi a la volee si besoin).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    Citation Envoyé par iohack Voir le message
    16 c'est la taille du buffer interne (qui est agrandi a la volee si besoin).
    Moi j' ai plutôt l' impression que cette notion de capacité de 16 caractères ne sert à rien. Puisque la méthodeappend() permet alors de mettre autant de caractères qu' on veut.

    Si on pouvait bloquer le nombre de caractères d' un objet StringBuffer à 16 ou autre nombre. Alors, la notion aurait un sens à mes yeux.
    Voilà mon problème.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    qu' appelez-vous buffer interne ???

  5. #5
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Tu cherches peut être la méthode "capacity" si tu veux obtenir la taille du buffer ?

    http://java.sun.com/j2se/1.5.0/docs/...html#capacity()

  6. #6
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Citation Envoyé par Nayila Voir le message
    Bonjour !
    Le constructeur StringBuffer() permet de construire un objet sans aucun caractère et avec une capacité initiale de 16 caractères.
    Comme tu le dis toi-même il s'agit de la capacité initiale du buffer interne.
    Le buffer interne est le tableau char[] contenant les caractères ajoutés à l'objet via les différentes méthodes append().
    Si tu disposes d'une estimation a priori de la longueur du buffer interne, autant appeler le constructeur adéquat avec cette capacité, cela évitera de l'agrandir en cours de route.

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,



    En effet la capacité d'un StringBuffer ne correspond pas à sa taille maximum mais au nombre de caractère qu'il peut recevoir avant d'être redimensionné.

    Lorsque on ajoute des caractères et que le buffer interne est trop petit ce dernier est agrandi (en général en doublant sa taille). La fait de spécifier une taille initiale peut éviter ces redimentionnements (mais le gain sera surtout sensible avec de grande quantité de données).

    Pour info la taille maximal théorique d'un StringBuffer est de Integer.MAX_VALUE (soit 2147483647 char), mais il y a de forte chance que cela aboutissent à une OutOfMemory (cela représente plus de 4Go).

    a++

    PS : A partir de Java 5.0 on peut utiliser StringBuilder à la place, qui contrairement à StringBuffer n'est pas thread-safe mais potentiellement plus performante en mono-thread

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    Citation Envoyé par herve91 Voir le message
    Comme tu le dis toi-même il s'agit de la capacité initiale du buffer interne.
    Le buffer interne est le tableau char[] contenant les caractères ajoutés à l'objet via les différentes méthodes append().
    Si tu disposes d'une estimation a priori de la longueur du buffer interne, autant appeler le constructeur adéquat avec cette capacité, cela évitera de l'agrandir en cours de route.
    ça y est. Je crois que votre réponse est plus convaincante.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. StringBuffer creation d'objets
    Par peuplier dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 09/01/2011, 15h49
  2. codage objet
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 22/08/2002, 16h49
  3. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53
  4. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo