PDA

View Full Version : [Java] accesso casuale su file


Cait Sith
07-03-2008, 21:11
Qual'è il modo più efficiente per accedere un dato da un milione di elementi di tipo float. In genere li devo caricare in memoria tutti, a volte devo accedere solo a singoli elementi.
Dato per scontato l'accesso bufferizzato, credo che leggere un elemento per volta non sia il massimo. Forse sarebbe meglio leggere i dati in un buffer di byte, solo che poi non so come convertirli in un array di float.

andbin
07-03-2008, 21:41
Qual'è il modo più efficiente per accedere un dato da un milione di elementi di tipo float. In genere li devo caricare in memoria tutti, a volte devo accedere solo a singoli elementi.Allora potresti usare RandomAccessFile, che ha readFloat() e seek(). E nota che per questioni di indipendenza dalla piattaforma, la lettura/scrittura di tipi composti di più byte è fatta solo in formato big-endian.

Cait Sith
07-03-2008, 22:43
mhm, in realtà mi è sorto un dubbio, a me servirebbe utilizzare il sistema degli stream perchè vorrei comprimere i dati con gli zipStream, però ho bisogno anche dell'accesso casuale (utilizzando gli indici sul dato già decompresso) e non so se le due cose sono compatibili :confused:
il fatto è che dovrei utilizzare queste classi da matlab per poter avere un accesso casuale su dati compressi, il matlab infatti salva i dati nel suo formato e li comprime, ma poi li devi caricare tutti in una volta (cosa proibitiva), se invece uso fwrite e fread non posso comprimere i dati e mi vengono fuori dei file da 3 GB l'uno :eek:

se non dovesse esserci la soluzione dovrò per forza creare un file da 3 GB, zipparlo in un secondo file (che dovrebbe venire da 200 MB) e poi cancellare il primo.
nell'accesso dovrei invece fare il contrario,
però così credo che rallenti molto il programma principale :(

cionci
09-03-2008, 00:27
Non credo che ci sia modo di lavorare direttamente sui dati compressi, non è detto che l'informazione di un dato compresso stia in una sola locazione, può darsi che l'informazione sia "spalmata" su molti dati precedenti.