Tableau de short dans un RandomAccessFile ? (pb short -> byte)
Bonjour,
Je veux mettre un tableau de milions de short dans un RandomAccessFile, de manière efficiente : donc pas short par short en utilisant .writeShort () sinon ça rame...
Je trouve ça etrange qu'on puisse même pas utiliser de buffer (type BufferedOutputStream), avec RandomAccessFile, et que je sois obligé de convertir mon tableau de short en tableau de byte... je trouve ça quand même un peu préhistorique. :cfou:
(c'est le prof de java avec qui j'ai pris un cours ici en espagne qui m'a dit ça, mais si vous avez une autre idée, je suis prenneur !!)
Bon, mon probleme est que le programme ci-dessous ne convertie pas bien les valeurs, il semble qu'il ait des erreurs de conversion short->byte ou bien byte->short, liées aux signes des valeurs... où est-ce que je me trompe ? :|
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
...
short image [] = new short [3360000] ;
short image2 [] = new short [3360000] ;
byte buffer [] = new byte [3360000*2] ;
...
//ecriture
File testfile = new File("/MUSICA/sequence3") ;
RandomAccessFile out = new RandomAccessFile (testfile,"rw") ;
for (int i = 0; i < image.length; ++i) {
// convertion short -> byte
buffer [i*2] = (byte) ( (image[i]) >> 8 ) ; // le probleme doit
buffer [i*2+1] = (byte) ( (image[i]) % 256 ); // etre ici...
}
out.seek(0) ;
out.write(buffer);
out.close();
...
//lecture
File testfile = new File("/MUSICA/sequence3") ;
RandomAccessFile in = new RandomAccessFile (testfile,"r") ;
in.seek(0);
in.read(buffer);
in.close();
for (int i = 0; i < image2.length; ++i) {
// convertion byte -> short
image2[i] = (short) ( ( (((short)buffer [i*2]) << 8 ) | ((short)buffer [i*2+1]) ) ) ;
// ...ou bien le probleme peut etre là ...
}
... |