Olá galera,
Estou com um problema, pois preciso criar alguns objetos que utilizam um BufferedReader, porem na classe que vou unir a criacao de todas eu perco ele.
Exemplo
BufferedReader bf = new BufferedReader(input);
Item1 it1 = new Item1(bf);
it1.rotina();
// O problema é aqui, pois o bf ja pasou todas as linhas na rotina, pois eu usei como referencia.
Item2 it2 = new Item2(bf);
it2.rotina();
A duvida é como posso clonar um BufferedReader? Não tenho acesso a este metódo…
Obrigado
Olá.
Teoricamente vc não precisaria usar clone. Depende do que esse objeto Item faz com o BufferedReader.
Desde que vc não chame o método close(), vc poderia continuar usando a mesma instância.
[quote=juno.rr]Olá.
Teoricamente vc não precisaria usar clone. Depende do que esse objeto Item faz com o BufferedReader.
Desde que vc não chame o método close(), vc poderia continuar usando a mesma instância.[/quote]
Eu leio todas as linhas até que a linha seja nula, e quando passo ele novamente, ja vai na linha nula.
Ola,
Pergunta, por que vc não lê o arquivo uma única vez, e armazena o que leu num list da vida… e depois acessa este list? o acesso a arquivos é muito, muito lento.
E respondendo a seua pergunta… vc não pode clonar um reader… vc pode abrir outro, ou talves invocar o metodo reset()…
Entendi,
então vc você utiliza o método mark( int ) no início do input (byte 0) e quando for utilizar novamente o BufferedReader, chama o método reset(), por exemplo:
BufferedReader bf = new BufferedReader(input);
bf.mark(Integer.MAX_VALUE);
Item1 it1 = new Item1(bf);
it1.rotina();
bf.reset();
Item2 it2 = new Item2(bf);
it2.rotina();
Ou vc pode utilizar a dica do amigo acima, é muito mais rápido, a não ser que o stream lido seja muito grande (mas muito mesmo) e vá consumir muito memória.
Pessoal, apliquei a lista de string.
Foi uma idéia muito boa do BrunoCarlo, pois deixei de controlar a linha dentro de cada classe, o que deixou o código mais limpo.
Só achei que ficou um pouco mais lento.
Muito obrigado mesmo pessoal.
Abraço
Sério?! estranho… era para ficar mais rápido…