Newsgroup: it.comp.java
Titolo: Leggere file Binario

ciao
devo leggere un file che ha intestazione ascii divisa per linee e poi
una parte in binario che deve essere letta un byte alla volta perche'
ha codifica tag (2 byte) lunghezza (2 byte) valore (n byte)
Erroneamente ho iniziato ad usare BufferedReader che mi ha consentito
facilmente di leggere la parte header (grazie a readLine e token su
parole chiave) e poi il metodo read in un buffer di char.
Ebbene tutto questo ha funzionato fino ad un certo punto (fino a valore
di byte positivi) proprio perche' vengono letti char e non byte quindi
internamente avvengono delle trasformazioni di codifica.
Pensavo di cavarmela cambiando la classe in
 BufferedReader br = new BufferedReader(new InputStreamReader(new
FileInputStream(fileName),"ISO-8859-1"));
ma non so se e' proprio giusto.Quello che voglio fare con questa mossa
e' che il byte con valore 0-255 (o se si preferisce -127,127) rimanga
identico se letto come char e pensavo di ottenerlo imponendo charset
iso.
Altrimenti dovrei usare classi che leggono solo byte ma mi costa poi
leggere header ascii visto che ho  paura di far casino con newline e cr
cioe' ho paura di non capire quando parte la parte bin del file
grazie infinite

 parole chiave) e poi il metodo read in un buffer di char.
E hai fatto bene. Quando hai terminato di leggere la parte header,
continui a leggere lo stesso stream usato per creare il Reader
(FileInputStream?) con read().

scusa ma non ho capito bene -(((
forse tu dici che impostare il charset non serve a nulla e non
raggiungo lo scopo di avere byte=char cioe'  byte corrispondente
numericamente al char (a parte il segno) ma che forse devo
1) creare un FileInputStream senza settare alcun charset
2) avvolgerlo in BufferedReader per leggere header ascii
3) ritornare al FileInputStream che e' gia' posizionato DOPO header
ascii e cominciare a leggere in vettori di byte e non + char (come
stavo facendo)
Corretto?
grazie infinite

 Corretto?
A mio avviso, si.

> A mio avviso, si.
ciao il problema sembra essere che quando dal BufferedReader passo a
FileInputStream mi trovo come posizione molto + avanti della fine
dell'header probabilmente per questioni di bufferizzazione
C'e' modo per ovviare alla cosa ?
grazie
 ciao


Io pero' in questo caso imposterei a 0 la dimensione del buffer di
BufferedReader (c'e' un costruttore che permette di farlo) perche',
quando hai terminato di leggere l'header e torni al FileInputStream,
la bufferizzazione potrebbe averti gia' posizionato lo stream oltre il
primo byte della porzione binaria del tuo file. In pratica di perderesti
per strada qualche dato...
Ciao
Roberto

purtroppo e' vietato mettere valore 0
Uff mi sa che occorre leggere header byte a byte
grazie ciao

marc...@tiscali.it
 wrote:

Si', scusa, ma con 1 potrebbe funzionare lo stesso: prova!
Ciao
Roberto

che mi dite della soluzione che invece sembra funzionare cioe' adottare
un charset specifico nella speranza che i byte letti come char non
subiscano modifiche?


 ha codifica tag (2 byte) lunghezza (2 byte) valore (n byte)
 > [...]
E un DataInputStream?:
http://java.sun.com/j2se/1.5.0/docs/api/java/io/DataInputStream.html
pole
-- 
ammentos - a lightweight persistence framework for JDK5
http://www.sourceforge.net/projects/ammentos
http://ammentos.biobytes.it