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

Entrée/Sortie Java Discussion :

methode write de (OutStreamWrite,PrintWriter) vs write(Printstream)


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 85
    Par défaut methode write de (OutStreamWrite,PrintWriter) vs write(Printstream)
    Bonjour,
    considérons le petit programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static void main(String[] args) throws IOException {
     
    PrintStream ps = new PrintStream(System.out);
    for (int i = 0; i <= 127; i++) ps.write(i);
     
    OutputStreamWriter ow = new OutputStreamWriter(System.out);
    for (int i = 0; i <= 127; i++) ow.write(i);
    ow.flush();
     
    PrintWriter pw = new PrintWriter(System.out);
    for (int i = 0; i <= 127; i++) pw.write(i);
    pw.flush();
    l'exécution donne la mème sortie:la méthode write(int i) dans les trois classes se comporte de la mème façon quelque soit la classe!!
    par exemple:
    write (33) affiche toujours le caractère "!" ?
    voici mon explication concernant PrintStream:
    write (33) a écrit l'octet 33 dans le stream puis la console a affiché le caractère qui correspond au code ASCII 33.
    par contre je ne trouve pas une explication concernant OutStreamWriter, PrintWriter?
    merci d'avance

  2. #2
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Bonjour,
    l'explication est la même pour les trois: les trois méthodes "write" écrivent le caractère spécifié* qui deviendra le caractère correspondant dans la table d'encoding spécifié.
    A noter que les encoding, eux, peuvent changer, en particulier pour les caractères spéciaux.
    A toi de lire la javadoc de chaque classe pour voir comment

    *évite de parler d'octet, il s'agit ici de caractère: la classe Writer par exemple écrit ses caractères sur 16 bits, soit deux octets. Je n'ai pas regardé chaque classe, encore une fois c'est décrit dans la javadoc.

  3. #3
    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,

    Citation Envoyé par Jidefix Voir le message
    *évite de parler d'octet, il s'agit ici de caractère:
    Lorsqu'on utilise des Stream on manipule bien des octets, comme indiqué dans la doc d'ailleurs...

    Citation Envoyé par Jidefix Voir le message
    la classe Writer par exemple écrit ses caractères sur 16 bits, soit deux octets. Je n'ai pas regardé chaque classe, encore une fois c'est décrit dans la javadoc.
    Non les Writer écrivent des caractères selon un encodage spécifique, qui dépend de la création du Writer. Selon l'encodage la taille mémoire des caractères peut varier...


    a++

  4. #4
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Lorsqu'on utilise des Stream on manipule bien des octets, comme indiqué dans la doc d'ailleurs...
    Je me suis peut-être mal exprimé mais c'était surtout pour faire ressortir l'idée que un "write" n'équivaut pas à écrire un seul octet.

  5. #5
    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
    Citation Envoyé par Jidefix Voir le message
    Je me suis peut-être mal exprimé mais c'était surtout pour faire ressortir l'idée que un "write" n'équivaut pas à écrire un seul octet.
    Ca dépend.
    La méthode write() des Stream écrit bel et bien un octet.
    La méthode write() des Writer écrit un caractère, dont la taille peut dépendre à la fois du caractère en question et de l'encodage.

    a++

  6. #6
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Ca dépend.
    La méthode write() des Stream écrit bel et bien un octet.
    a++
    J'allais répondre en disant "comment alors représenter les caractères >255"... puis j'ai fais un test en affichant de 0 à 510 et je me suis répondu tout seul :p

    Autant pour moi!

  7. #7
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 85
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Ca dépend.
    La méthode write() des Writer écrit un caractère, dont la taille peut dépendre à la fois du caractère en question et de l'encodage.

    a++
    Bonjour,
    la question qui se pose pour moi:
    si elle rencontre plus d'un caractère comme : write(33), ici cette méthode trouve le caractère 3 suivie par le caractère 3. que fait cette méthode dans ce cas la?
    merci

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    A noter que ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PrintStream ps = new PrintStream(System.out);
    Est inutile puisque System.out est déjà un PrintStream

Discussions similaires

  1. ant erreur Methode write
    Par totoche dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 02/08/2011, 23h22
  2. PrintStream méthode write
    Par SOA_j2EE dans le forum Général Java
    Réponses: 4
    Dernier message: 18/07/2009, 19h26
  3. Methode write des sockets n'envoie rien
    Par geek-59600 dans le forum Qt
    Réponses: 13
    Dernier message: 17/06/2009, 19h24
  4. Erreur [Incompatible types] avec la Methode Write
    Par aliwassem dans le forum Langage
    Réponses: 6
    Dernier message: 21/12/2008, 04h50
  5. Utilisation du write(), methode ?
    Par gregb34 dans le forum C++
    Réponses: 2
    Dernier message: 18/04/2008, 17h44

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