Fasyrio ha scritto:
Esiste secondo voi un sistema (anche non tramite Java) che mi permetta di leggere in chiaro il contenuto dei file?
Purtroppo tutto questo non è affatto facile, specialmente se:
a) non hai documentazione sul formato dei file.
b) non hai possibilità di contattare chi ha queste specifiche (o se anche potessi ma non te le vogliono fornire).
L'unica cosa che ti tocca fare è armarti di (molta) pazienza e cercare di scoprire come sono fatti i file con un bel po' di analisi sul loro contenuto (ti serve come minimo un
hex viewer/editor, non certo un editor di testo come wordpad!).
Ci sono parecchie questioni da scoprire e capire sul contenuto:
- Sono tutti record di informazione a lunghezza fissa di un tot di byte? O sono a lunghezza variabile?
- Se sono a lunghezza variabile, c'è una intestazione del record che dà informazioni sulla lunghezza e/o altro?
- I record (che siano di lunghezza fissa o no) sono tutti perfettamente contigui uno dietro l'altro oppure esiste un meccanismo di allocazione minima con blocchi di N byte? (se l'unità minima di allocazione fosse es. 1024 byte e un record ne occupa 800, resterebbero 224 byte non usati e senza alcun significato particolare)
- C'è un sistema di indicizzazione basato su algoritmi b-tree o cose del genere?
- I tipi di dati come sono memorizzati? Le stringhe sono in UTF-8, ISO-8859-1, altro o nel charset predefinito della piattaforma? I dati numerici multi byte come sono memorizzati? In formato Little-Endian o Big-Endian?
Se hai quella applicazione a tua disposizione e puoi fare prove, potresti azzerare i dati ed inserirne di nuovi. Così puoi mettere stringhe e numeri noti a te e poi andare a vedere il contenuto del file. Potrebbe essere sicuramente utile.
Potrebbe dare anche un qualche aiuto in più se riuscissi a scoprire quale
libreria/framework l'applicazione usa per scrivere quei file.
P.S. In Java, per leggere dati "binari", BufferedReader assolutamente NON ti serve. Ti serve come minimo un (Xyz)InputStream eventualmente con al di sopra un DataInputStream, specialmente se i dati numerici fossero in Big-Endian (DataInputStream non tratta dati in Little-Endian).