Class Reader probleme methode mark()
Résolu/Fermé
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
-
Modifié par totodunet le 27/03/2014 à 20:01
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 - 27 mars 2014 à 22:20
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 - 27 mars 2014 à 22:20
A voir également:
- Class Reader probleme methode mark()
- Télécharger adobe reader 9.1 français gratuit - Télécharger - PDF
- Telecharger foxit reader - Télécharger - PDF
- 3d mark - Télécharger - Informations & Diagnostic
- Crystal mark - Télécharger - Divers Utilitaires
- Diskinternals linux reader - Télécharger - Stockage
3 réponses
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
27 mars 2014 à 20:11
27 mars 2014 à 20:11
Bonsoir,
Reader est une classe abstraite et markSupported() est une méthode optionnelle, donc par défaut la méthode mark renvoie une exception comme quoi la méthode n'est pas pris en charge. Ce qu'il faudrait vraiment regarder ce n'est pas la classe Reader - puisqu'elle est abstraite - mais la classe réelle que tu utilises, celle où tu fais ton new, et éventuellement la changer afin de considérer une classe qui supporte cette option.
Dans tous les cas, un code propre devrait être :
Reader est une classe abstraite et markSupported() est une méthode optionnelle, donc par défaut la méthode mark renvoie une exception comme quoi la méthode n'est pas pris en charge. Ce qu'il faudrait vraiment regarder ce n'est pas la classe Reader - puisqu'elle est abstraite - mais la classe réelle que tu utilises, celle où tu fais ton new, et éventuellement la changer afin de considérer une classe qui supporte cette option.
Dans tous les cas, un code propre devrait être :
if (reader.markSupported()) reader.mark(limit); else // Erreur
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
199
27 mars 2014 à 20:32
27 mars 2014 à 20:32
bonsoir,
merci pour votre reponse.
la classe instanciée est FileReader. J'ai essayé de remplacé FileReader par Reader mais ça ne change rien, elle hérite directement de Reader. La méthode mark() et reset() et d'autres ne sont pas redéfinies.
en fait je m'explique j'ai une classe test dont voici un bout de code :
et moi je doit faire la classe SeqLexeme représentant une séquence de lexemes avec la méthode lexemeSuivant() qui donne un lexeme.
Dans ma classe SeqLexeme, j'ai un attribut qui est de type Reader et que j'initialise dans le constructeur :
merci pour votre reponse.
la classe instanciée est FileReader. J'ai essayé de remplacé FileReader par Reader mais ça ne change rien, elle hérite directement de Reader. La méthode mark() et reset() et d'autres ne sont pas redéfinies.
en fait je m'explique j'ai une classe test dont voici un bout de code :
if (args.length != 0) { File f = new File(args[0]); FileReader fr = new FileReader(f); SeqLexeme sl = new SeqLexeme(fr); Lexeme l = null; do { l = sl.lexemeSuivant(); System.out.println(l); } while (l.donneType() != TypeLexeme.L_FIN); }
et moi je doit faire la classe SeqLexeme représentant une séquence de lexemes avec la méthode lexemeSuivant() qui donne un lexeme.
Dans ma classe SeqLexeme, j'ai un attribut qui est de type Reader et que j'initialise dans le constructeur :
public class SeqLexeme { //ATTRIBUTS private Reader r; //CONSTRUCTEUR public SeqLexeme(Reader lecteur){ this.r=lecteur; }
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
27 mars 2014 à 21:36
27 mars 2014 à 21:36
Pour l'instant je ne vois toujours pas ce que tu cherches à faire ni pourquoi tu as besoin d'utiliser mark() vu que dans le code que tu nous donnes tu en t'en sers pas...
Tu dis que FileReader hérite directement de Reader, ce n'est pas tout à fait vrai, il y a la classe InputStreamReader entre les deux (FileReader extends InputStreamReader, InputStreamReader extends Reader). Mais effectivement mark() n'est pas redéfini donc tu ne peux pas l'utiliser.
Un FileReader se contente de faire les entrées/sorties sans rien garder en mémoire, tu ne peux donc pas utiliser mark. Mais en utilisant un BufferedReader par dessus tu devrais pouvoir utiliser cette fonctionnalité, ce qui requiert une mise en mémoire d'une partie du fichier et alourdit donc les traitements, c'est pour ça que ce n'est pas implémenté par défaut.
Tu dis que FileReader hérite directement de Reader, ce n'est pas tout à fait vrai, il y a la classe InputStreamReader entre les deux (FileReader extends InputStreamReader, InputStreamReader extends Reader). Mais effectivement mark() n'est pas redéfini donc tu ne peux pas l'utiliser.
Un FileReader se contente de faire les entrées/sorties sans rien garder en mémoire, tu ne peux donc pas utiliser mark. Mais en utilisant un BufferedReader par dessus tu devrais pouvoir utiliser cette fonctionnalité, ce qui requiert une mise en mémoire d'une partie du fichier et alourdit donc les traitements, c'est pour ça que ce n'est pas implémenté par défaut.
Reader markableReader = new BufferedReader(new FileReader(args[0]));
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
199
27 mars 2014 à 22:20
27 mars 2014 à 22:20
je me suis rendu compte que dans le fichier texte les lexèmes constitués de plusieurs caractères étaient séparés d'espaces. avec une petite récursivité qui prend le lexeme suivant quand il lit un espace c'est tout bon!
merci beaucoup j'ai réussi sans avoir à utiliser mark() finalement
sinon j'aurai bien fait différemment mais je n'ai pas le droit de modifier les constructeurs et entêtes fournies par le professeur. en réalité je dois juste compléter le vide et donc je devais me débrouiller avec Reader.
Le but du projet en fait c'est de pouvoir ensuite manipuler des arbres contenant des lexemes et après évaluer ou simplifier des expressions booleenes plus ou moins longues en parcourant les arbres. assez intéressant...
merci KX!
merci beaucoup j'ai réussi sans avoir à utiliser mark() finalement
sinon j'aurai bien fait différemment mais je n'ai pas le droit de modifier les constructeurs et entêtes fournies par le professeur. en réalité je dois juste compléter le vide et donc je devais me débrouiller avec Reader.
Le but du projet en fait c'est de pouvoir ensuite manipuler des arbres contenant des lexemes et après évaluer ou simplifier des expressions booleenes plus ou moins longues en parcourant les arbres. assez intéressant...
merci KX!