Salve,
il mio problema riguarda una mia implementazione di una queue.
La mia queue memorizza i dati (stringhe) su un file di testo queue.txt e utilizza 4 metodi: costruttore,enqueue,dequeue e contains:il primo ovviamente crea il file "coda" e inizializza gli stream di input output, il secondo restituisce la stringa in testa alla coda e il terzo mi dice se c'è nella coda una certa stringa.
Ovviamente la dequeue non rimuove la stringa che ritorna,ma avevo pensato di sfruttare le proprietà dello stream di input:la stringa in testa alla coda sarà la prossima stringa che verrà letta,e ciò comporta che lo stream non debba essere chiuso tra una chiamata e l'altra del metodo in modo che possa fungere da iteratore(tale stream deve essere aperto alla creazione della coda e chiuso solo quando la coda non servirà più).
Io avevo pensato di implementarla così:


codice:
import java.io.*;

public class UserQueue {

private FileOutputStream fw;
private PrintStream w;
private FileInputStream fr1;
private BufferedReader r1;

//--------------------------------------------------------------------------------------

public UserQueue(){

try{

fw=new FileOutputStream("queue.txt",true);
w=new PrintStream(fw);

fr1=new FileInputStream("queue.txt");
r1=new BufferedReader(new InputStreamReader(fr1));

}catch(IOException e){ System.out.println("UserQueue:errore IO!");
		       System.exit(1); }


}

//--------------------------------------------------------------------------------------

public void enqueue(String nome,int livello){


	
	w.append(nome+" "+livello+";\n");

}

//--------------------------------------------------------------------------------------

public String dequeue(){

String aux=null;

int i,j;

if(r1==null) System.out.println("r1 null");

try{
	aux=r1.readLine();

	if(aux==null) System.out.println("aux null");

}catch(IOException e){ System.out.println("dequeue:errore IO!");
		       System.exit(1); }

if(aux!=null){

	if((i=aux.indexOf(" "))==-1) { System.out.println("dequeue:errore stringa!");
		       			       System.exit(1); }
		
	if((j=aux.indexOf(";"))==-1) { System.out.println("dequeue:errore stringa!");
		       			       System.exit(1); }


	return aux;
}

else return null;
	
}

//--------------------------------------------------------------------------------------

public boolean contains(String nome){

String aux;
int i;

try{

FileInputStream fr2=new FileInputStream("queue.txt");

BufferedReader r2 = new BufferedReader(new InputStreamReader(fr2));

while((aux=r2.readLine())!=null){

	if((i=aux.indexOf(" "))==-1) { System.out.println("dequeue:errore stringa!");
		       		       System.exit(1); }

	if(nome.equals(aux.substring(0,i))) return true;
}


}catch(IOException e){ System.out.println("contains:errore IO!");
		       System.exit(1); }
return false;

}

//--------------------------------------------------------------------------------------


}
Ma ho un problaema in fase di esecuzione durate la chiamata a dequeue(): readLine() mi ritorna null invece di ritornare la prossima stringa letta.
Come mai?
Come posso risolvere questo problema??

Un grazie enorme a tutti!!