Newsgroup: it.comp.java
Titolo: Lettura dati da disco

Ciao ragazzi, scusate se vi pongo di nuovo queste domande sceme, ma l'help
di Java proprio non mi aiuta.
Io devo leggere un blocco dati da un file pari a : dim =
x*y*(bitPerColore/8)
Per esempio diciamo che
x = 640
y = 480
bitPerColore = 24;
dim = 640*480*(24/8) = 921600 byte
Ho provato da prima ad usare le funzioni di FileReader, e sembrano
funzionare.
Dico sembrano, perché avendo notato che il risultato a video non è quello
che mi aspettavo (supponendo che le altre operazioni siano corrette) ho
cercato di capire se i punti dai quali voglio che vengano letti i blocchi
dati di n byte, fossero quelli giusti.
Ho usato la funzione read(char[] b, offset, len);
Ho provato a far sballare tale funzione mandando avanti di n byte l'indice
del file usando il metodo skip(len)
e poi effettuare una lettura che andasse oltre la fine del file.
Ma non sono riuscito a far scattare l'eccezione.
Depresso ho cercato di usare la classe RandomAccessFile.
Con mia somma sorpresa ho scoperto che la sfiga continua a perseguitarmi.
Tale classe gestisce gli array di Byte, che essendo di tipo signed mi fanno
sballare tutto.
Che faccio?
--
Danilo Cividin
E-Mail 
dciv...@tiscalinet.it

 writes:
T> Con mia somma sorpresa ho scoperto che la sfiga continua a perseguitarmi.
T> Tale classe gestisce gli array di Byte, che essendo di tipo signed mi fanno
T> sballare tutto.
??????????????
Scusami, se Java coi byte ci carica il bytecode da eseguire, come mai a te
i byte non funzionano ? Ci devi fare dell'aritmetica ?
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )

Grazie ragazzi, ho risolto da solo..............
Ho trasformato a MANO visto che la potenza di Java non è sufficente a
trattare i dati unsigned, e leggendo i dati con la classe RandomAccessFile,
che mi ha risolto gli altri problemi.
Per fortuna che ho un Duron 700, altrimenti con tutte le trasformazioni che
ho dovuto fargli fare.............

 writes:
T> Grazie ragazzi, ho risolto da solo..............
T> Ho trasformato a MANO visto che la potenza di Java non è sufficente a
T> trattare i dati unsigned, e leggendo i dati con la classe RandomAccessFile,
Ah no ? Hai paura che faccia overflow leggendo un 0xFF in un byte ?


Ciao Umberto, scusa se ti do del tu.
Credo che tu sia l'unico che ha capito il mio problema.
Ho creato una classe che legge un file grafico di tipo BMP.
Il problema dei Byte e che se li passo ad un valore intero per poterli
gestire, mi trovavo che la dimensione in altezza di un file era -47 o che la
sua dimensione su disco era -3274 (numeri in questo caso sparati così).
Come dice una persona su una reply fatta, è vero anche il C usa i byte, ma
essendo un linguaggio più plastico, permetto i dati di tipo unsigned, quindi
passare da un byte (che poi sul C vecchio non esiste c'era il CHAR) ad un
valore unsigned non vi era nessun problema.
Qui ho risolto così, dato n un numro negativo, lo addiziono a 256 e trovo il
valore unsigned.
Ciao e grazie di nuovo a tutti (scusate per le polemiche su Java ma non mi
rimane molto simpatico).

 writes:
T> Ciao Umberto, scusa se ti do del tu.
         ^
Niente m, bitte...
T> valore unsigned non vi era nessun problema.
In C  il tipo char non  era garantito unsigned,  c'era l'unsigned char
per quello.   Quando si usa il  C attenzione ad  andare troppo leggeri
con l'architettura della macchina che si ha sotto.
T> Qui ho risolto cosě, dato n un numro negativo, lo addiziono a 256 e trovo il
T> valore unsigned.
E' la cosa da fare, e solo  nel momento in cui devi fare dei calcoli o
delle assegnazioni a dati di  immagine piů grande (per evitare la sign
extension). Oppure si trova il modo  di lavorare con gli shift, ma una
somma intera non costa poi tanto.
