Equivalent fread (langage C) en Java
Bonjour,
Je cherche à adapter du code C en Java.
L'une des fonctions me pose problème.
Il s'agit de lire dans un fichier des longs qui ont été écrits puis lus dans le fichier avec les fonctions suivantes du langage C :
Code:
1 2 3
| fwrite(&donnee, 4, 1, fich);
fread(&donnee, 4, 1, fich); |
où l'on lit / écrit l'équivalent d'un long (4 octets x 1) avec les paramètres suivants :
- donnee est un long où l'on lit ou écrit
- 4 correspond au nombre d'octets à lire ou écrire pour chaque élément
- 1 correspond au nombre d'éléments à lire ou écrire
- fich est le fichier où l'on lit ou écrit
Donc, j'ai tenté de transposer cela en Java de la manière suivante afin de lire le fichier écrit précédemment :
Code:
1 2 3 4 5 6 7 8 9
| inputBinaryFile = new FileInputStream (NomDuFichier); // Fichier binaire
inputBinaryData = new DataInputStream (inputBinaryFile); // Le même fichier via stream
int NbDonneesLues=0;
for(;;){
TabNum [NbDonneesLues] = (long)inputBinaryData.readInt ();
NbDonneesLues++;
} |
Sachant que TabNum est un tableau de long, la première astuce consiste à comprendre (je crois, corrigez si erreur !) qu'un long en C est de taille 4 octets alors qu'en Java il est de taille 8 octets.
Cela explique dans mon code le readInt casté en long puis rangé dans un tableau de longs.
Résultat au final :
Ca donne des nombres super longs, voire négatifs. Bref, rien à voir avec les données lues et écrites à l'origine en C.
J'ai essayé avec readLong (qui lit 8 octets donc) et logiquement ça ne lit pas correctement non plus.
Est-ce que vous avez des idées ?