Bonjour tout le monde,
J'ai une question sur les relations entre octet, Char et I/O :
J'ai une application qui ne peut lire un fichier qu'en mode binaire : lecture des octets. En effet cette application utilise MappedByteBuffer et du coup elle lit que des octets.

Mais, le fichier c'est un fichier text, et du coup je converti chaque octet sous form Char avec Casting. quelque chose comme cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
(Char)ByteBuffer.Read(int)
Dans le 1er temp, j'avais un fichier ascii et du coup chaque Octect = Char. Par conséquent, si je voulais chercher le char dont l'index était 100, je cherchais le 100eme octet. Comme cela, tout marchais bien.

Mais aujourd'hui, j'ai un fichier text qui a des comportement bizarre. Si je prend un InputStream de ce fichier avec une connexion FTP (réalisé par FTPClient de API apache en Java), chaque octet correspond bien à un char. MAIS, quand je utilise la version originale de ce fichier qui se trouve sur mon disque local, (du coup j'ai un FileInputStream), l'application ne marche pas comme avant. Cela veut dire que chaque octet n'est plus équivalent d'un char.
Je m'explique : par example avec InputStream et connexion FTP, l'octet 100 est égale à char "A" mais avec un FileInputStream et traitement local du même fichier , l'octet 100 est égale à "F".
Le problème c'est que la taille de fichier differ quand il est sur le disque du début et quand je le télécharge avec FTPClient de Java.
Je pensais que peut-etre c'est un fichier unicode (localement) mais sa taille n'est pas 2 fois plus que sa taille un mode FTP.

Enfin, je suis perdu. Comment je peut savoir combien d'octet sur un fichier correspond à un char? Ou plus précieusement, comment lire des chars d'un fichier en mode binaire (c-a-d en utilisant des bytebuffer et pas des methods propre de lire des fichier text comme des Readers) ?

Je vous remercie d'avance
Hassan