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

Registered by Luc Bruninx

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:
milestone icon abstrasy-1.0.6338.0
Started by
Luc Bruninx
Completed by
Luc Bruninx

Related branches

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).

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.