Ajout des méthodes :read-byte! et :write-byte!, ainsi que l'amélioration des méthodes :read! et :read-buffer! dans l'adaptateur abstrait Io:File
Amélioration de l'adaptateur abstrait Io:File pour une meilleure prise en compte des flux.
Blueprint information
- Status:
- Complete
- Approver:
- Luc Bruninx
- Priority:
- Medium
- Drafter:
- Luc Bruninx
- Direction:
- Approved
- Assignee:
- Luc Bruninx
- Definition:
- Approved
- Series goal:
- Accepted for 1.0
- Implementation:
- Implemented
- Milestone target:
- abstrasy-1.0.6338.0
- Started by
- Luc Bruninx
- Completed by
- Luc Bruninx
Related branches
Related bugs
Sprints
Whiteboard
Les améliorations demandées sont particulièrement nécessaire pour assurer le support efficace et fiable des pipes unix. Abstrasy implémente l'accès aux flux standards à l'aide de l'adaptateur io:File.
On peut en effet ouvrir les flux:
- stdin à l'aide de (new File using{:open-url! "stdin://"})
- stdout à laide de (new File using{:open-url! "stdout://"})
- et stderr avec (new File using{:open-url! "stderr://"})
Cependant, la détection de la fin du flux d'entrée pose problème.
Il convient donc d'établir une stratégie à la fois simple et efficace.
On sait que Java annonce la fin d'un flux lu par la méthode file.read() en retournant -1.
Ainsi, si file.read() retourne -1 et que le cache de lecture est vide, on peut supposer que le flux est fermé (la fin du fichier est atteinte). La méthode (:readln!) pourrait ainsi retourner NOTHING pour annoncer que la fin du flux est atteinte.
Attention, il ne faut pas tester la fin d'un flux comme ceci:
(define 'data)
(while{let! data (fichier:readln!)} do{...})
En effet, si une ligne vide est lue, la boucle peut s'arrêter alors que la fin du flux n'est pas atteinte.
La bonne manière est la suivante:
(define 'data)
(while{something? (let! data (fichier:readln!))} do{...})
En effet, tant que quelque chose est placé dans 'data, on continue.
Lorsque 'data vaut NOTHING, cela signifie qu'on est arrivé au bout du flux.
On ajoute également 2 nouvelles méthodes:
(:read-byte!) et (:write-byte! nombre) qui permettent de lire et d'écrire un octet dans un fichier (ou un flux).
Work Items
Work items:
Beta : DONE
Deployment: http://