TP8 - Question 4.2

Programmation Avancée

Modérateur : Douin

VincentRIFA
Messages : 15
Inscription : 01 nov. 2017 19:19

TP8 - Question 4.2

Message par VincentRIFA » 21 déc. 2017 15:59

Bonjour,

Je ne comprends pas l'objectif à atteindre dans la question 4.2.
Faut-il juste afficher le texte à l'envers ?

Merci,
Vincent

franck.pascutti
Messages : 9
Inscription : 30 sept. 2017 15:09

Re: TP8 - Question 4.2

Message par franck.pascutti » 21 déc. 2017 16:24

Bonjour,

Le PushbackInputStream est une classe de type InputStream (qui permet la lecture de bytes) mais qui en plus offre la possibilité de remettre des bytes à l'avant du flux.

Par exemple (code non compilé/testé) :

Code : Tout sélectionner

ByteArrayInputStream is = new ByteArrayInputStream({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15});
PushbackInputStream pbis = new PushbackInputStream(is, 16);
byte[] b = new byte[4];
pbis.read(b); // b == {0,1,2,3};
pbis.read(b); // b == {4, 5, 6, 7};
pbis.unread({16, 17});
pbis.read(b); // b == {16, 17, 8, 9};
Ici on a "pushé" les bytes '16' et '17' à l'avant du flux. Ce qui fait que ce sont eux qui sont obtenus lors de la lecture suivante.

Dans la question 4.2, le but (tout du moins ce que j'en ai compris) est de créer une chaîne de filtres contenant un UpperCaseInputStream et un PushbackInputStream et de valider que celle-ci se comporte comme attendu (que tous les caractères sont bien en majuscule y compris ceux remis via le PushbackInputStream).

J'espère que cela va t'aider.

Franck Pascutti

franck.pascutti
Messages : 9
Inscription : 30 sept. 2017 15:09

Re: TP8 - Question 4.2

Message par franck.pascutti » 21 déc. 2017 16:36

Voici le code ci-dessus corrigé et aussi légèrement modifié :

Code : Tout sélectionner

    ByteArrayInputStream is = new ByteArrayInputStream(new byte[]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'});
    PushbackInputStream pbis = new PushbackInputStream(is, 16);
    byte[] b = new byte[4];
    
    pbis.read(b); // b == {'a','b','c','d'};
    System.out.println(new String(b, "UTF-8"));
    
    pbis.read(b); // b == {'e', 'f', 'g', 'h'};
    System.out.println(new String(b, "UTF-8"));
    
    pbis.unread(new byte[]{'y', 'z'});
    pbis.read(b); // b == {'y', 'z', 'i', 'j'};
    System.out.println(new String(b, "UTF-8"));
Voici un doodle avec le code https://www.jdoodle.com/online-java-com ... 1xVGMQ7Nc4

Dans mon exemple, si tu rajoutes un UpperCaseInputStream, tous les caractères lus devraient être en majuscules.

Franck

VincentRIFA
Messages : 15
Inscription : 01 nov. 2017 19:19

Re: TP8 - Question 4.2

Message par VincentRIFA » 22 déc. 2017 13:21

Merci beaucoup pour ta réponse !

En reprenant mon code avec tes explications, je me suis rendu compte que ma méthode UpperCase me remontait un flux vide...
Du coup, les tests ne testaient rien... :(
(Malgré cela, les tests JNEWS passaient quand même)

Finalement, j'ai corrigé en m'aidant de ta réponse ! :D

Concernant le PushBack, je l'ai utilisé pour remplacer les 'espaces' par des 'underscore' dans mon flux, et tester qu'il n'y a plus d'espaces après.

Encore merci !

pthellier
Messages : 29
Inscription : 10 oct. 2017 13:52

Re: TP8 - Question 4.2

Message par pthellier » 26 déc. 2017 9:45

Dans la question 4.2, le but (tout du moins ce que j'en ai compris) est de créer une chaîne de filtres contenant un UpperCaseInputStream et un PushbackInputStream et de valider que celle-ci se comporte comme attendu (que tous les caractères sont bien en majuscule y compris ceux remis via le PushbackInputStream).
La javadoc de la méthode read() explique que read renvoie les caractères tel quels après un pushbackinputstream dans pas forcément en majuscule. Le but peut être de démontrer qu'il est possible de passer outre la mise en majuscule d'une chaîne de caractères par exemple...C'est ce que j'obtiens d'ailleurs j'injecte une chaine en minuscule par unread() et le read() me renvoie la même chaîne non transformée.

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité