Сериализация списка бесконечный l oop iterator.hasNext () JAVA - PullRequest
0 голосов
/ 12 июля 2020

Я пытался сериализовать List<List< String >> в Java, но мой код зависает в al oop. Вот код:

 public void Serializing(List<List<String>> player,File file ) throws IOException{
        
        try {
            fileOut=new FileOutputStream(file);
            out= new ObjectOutputStream(fileOut);
            Iterator <List <String>> it=player.listIterator();
          while(it.hasNext()){ //Somehow if i don't put this just adds my first element 
              out.writeObject(player.listIterator().next());
            }
            fileOut.close();
            out.close();
            
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ManejoInformacion.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Я добавляю десериализуемый метод на всякий случай

public  List<List<String>> deserializable(File file) throws FileNotFoundException, IOException, ClassNotFoundException{
        ObjectInputStream in;
        List<List<String>> info;
        try (FileInputStream fileIn = new FileInputStream(file)) {
            in =new ObjectInputStream(fileIn);
            info = new ArrayList<>();
            info =(List<List<String>>)in.readObject();
         }      in.close();
        return info;
    }

Надеюсь, этого достаточно! Спасибо :)

1 Ответ

2 голосов
/ 12 июля 2020

Здесь:

out.writeObject(player.listIterator().next());

вы создаете новый итератор. Но у вас уже был итератор, и вам нужно использовать его, чтобы его состояние обновлялось.

out.writeObject(it.next());

В противном случае it.hasNext() остается верным, потому что вы не берете элементы из it.

В качестве альтернативы, избавьтесь от всех ссылок на итераторы, избавьтесь от while-l oop и просто используйте for-l oop:

for (List<String> item: player) {
    out.writeObject(item);
}

for-l oop обрабатывает итератор неявно, поэтому вам не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...