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.![]()
(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 : Sélectionner tout - Visualiser dans une fenêtre à part
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à ... } ...
Partager