[Java] Usare lo stesso input stream più volte
Inviato: lunedì 25 maggio 2015, 14:27
Salve a tutti,
al mio programma Java viene passato tramite redirezione dell'input un file (o meglio il suo percorso), con un comando del genere: Tale file dovrà essere successivamente "parsato". Il processo di parsing avviene però in più fasi, ogni fase usa però lo stesso InputStream, che in questo caso è System.in. Ogni fase parsa il file usando uno scanner, estrapolando ogni volta informazioni diverse.
Il problema è che uno stream è unidirezionale, cioè una volta letto, non posso "riavvolgerlo" e ricominciare la lettura.
Il processo di parsing è fatto grossomodo così;
L'approccio che ho seguito è il seguente. Prima di iniziare il parsing vero e proprio, salvo il contenuto del file in una stringa
Modifico fase1(InputStream) e fase2(InputStream) in fase1(String), fase2(String) mentre per la fase3 creo un'istanza della classe Scanner usando stavolta la stringa appena creata:
Potrebbe essere una soluzione ragionevole o ci sono altri approcci? Tenete conto che non devo usare librerie esterne al linguaggio.
Grazie
al mio programma Java viene passato tramite redirezione dell'input un file (o meglio il suo percorso), con un comando del genere:
Codice: Seleziona tutto
java -jar mioPgr.jar < [percorso]file.estensioneIl problema è che uno stream è unidirezionale, cioè una volta letto, non posso "riavvolgerlo" e ricominciare la lettura.
Il processo di parsing è fatto grossomodo così;
Codice: Seleziona tutto
costruttore classe(InputStream in) {
fase1(in);
fase2(in);
Scanner sc = new Scanner(in);
// Fase 3
...
}Codice: Seleziona tutto
String content = new Scanner(in).useDelimiter("\\Z").next();Codice: Seleziona tutto
costruttore classe(InputStream in) {
String content = new Scanner(in).useDelimiter("\\Z").next();
fase1(content);
fase2(content);
Scanner sc = new Scanner(content);
// Fase 3
...
}Grazie