[RESOLVIDO] Arquivo binário é gerado "pulando" informações

Eu tenho uma arquivo chamado “series.txt” que contém o seguinte conteúdo:

Game of Thrones;Drama;10.0;
Breaking Bad;Drama;8.0;
Stranger Things;Fantasia;7.0;
Greys Anatomy;Drama;9.0;

Exatamente dessa forma, com um nome, gênero e nota de cada série em uma linha.

O que eu preciso fazer é instanciar um objeto para cada série, cada linha sendo um objeto, e os atributos (nome, gênero , nota) são delimitados por “;”. Após eu devo salvar um arquivo binário esses objetos.

Para instanciar os objetos eu fiz da seguinte maneira:

public ArrayList<Serie> instanciarSeries(BufferedReader buffer) {
		
     ArrayList<Serie> series = new ArrayList<>();
     String linha;
		
	try {
		while((linha = buffer.readLine()) != null)
                {
		    String[] atributoSeries = buffer.readLine().split(";");
		    float nota = Float.parseFloat(atributoSeries[2]);
		    series.add(new Serie(atributoSeries[0], atributoSeries[1], nota));
		}
	} catch (IOException e) {
		System.out.println("Erro de entrada e saída.");
		e.printStackTrace();
	}
	return series;
}

Nesse ponto já começa o problema, pois os objetos que são passados para o ArrayList são apenas a segunda e quarta linha, logo quando eu crio o arquivo binário ele só apresenta as duas que estavam no ArrayList

Coloca a solução para fica na comunidade!

O erro estava nessa parte:

while((linha = buffer.readLine()) != null)
{
    String[] atributoSeries = buffer.readLine().split(";");
    float nota = Float.parseFloat(atributoSeries[2]);
    series.add(new Serie(atributoSeries[0], atributoSeries[1], nota));
}

Ao declarar linha = buffer.readLine() ele já havia lido a primeira linha, logo, ao atribuir atributoSeries = buffer.readLine(), o programa passa para a segunda linha e cria o objeto, na repetição do laço linha assume a terceira linha do arquivo .txt, mas ao chamar atributoSeries novamente o buffer passa para a quarta linha do arquivo.txt

O correto seria:

while((linha = buffer.readLine()) != null)
{
   String[] atributoSeries = linha.split(";");
   float nota = Float.parseFloat(atributoSeries[2]);
   series.add(new Serie(atributoSeries[0], atributoSeries[1], nota));
}
1 curtida

A comunidade agradece :wink: