2016-07-20 5 views
-1

Я задал предыдущий вопрос о том, как сохранить несколько файлов сохранения в файл .ser, и мне предложили использовать хешсет, потому что они сериализуемы. Я попытался написать тестовый фрагмент кода для сериализации каждый кусочек информации внутри хэш-набора:Java hashset как сериализовать несколько объектов

public class testHashSet { 
    public static void main(String[] args) throws ClassNotFoundException { 
     testClass new1 = new testClass("Hello", "male", true); 
     testClass new2 = new testClass("Goodbye", "female", true); 
     testClass new3 = new testClass("Something", "other", false); 
     HashSet<testClass> hSet = new HashSet<testClass>(); 
     hSet.add(new1); 
     hSet.add(new2); 
     hSet.add(new3); 
     System.out.println(hSet); 
     for(int i = 0; i < hSet.size(); i++) { 
      try { 
       FileOutputStream fileOut = new FileOutputStream("/Users/Prodigy958/Desktop/Hack_exeSaves.ser"); 
       ObjectOutputStream out = new ObjectOutputStream(fileOut); 
       out.writeObject(hSet(i)); 
       out.close(); 
       fileOut.close(); 
      } catch(IOException i) { 
       i.printStackTrace(); 
      } 
     } 
    } 
} 

Однако у меня возникают трудности с получением кода, чтобы написать объект с индексом (I), потому что он говорит, что этот метод не определен для типа HashSet. Есть ли способ итерации через каждую часть информации в хэш-наборе или я должен сериализовать весь набор сразу. Еще один вопрос заключается в том, что если первым ответом является последний, как бы я хотел бы десериализовать данные на отдельные классы?

+0

Вы можете выполнить итерацию по набору с помощью 'for (элемент testClass: hSet) {...}' – bradimus

ответ

2

Решение: Сериализовать сам хешсет. Просто убедитесь, что testClass реализует Serializable, и все его поля делают это.

Если вы хотите его несериализовать и прочитать объект, вы нажмете его на HashSet<testClass>, и он сохранит свое состояние, как прежде, чем вы его сериализовали.

+0

, если я сериализует весь хэшсет, что произойдет, когда я его не инициализировал, и попытался неэтериализовать каждый «объект класса» в отдельный класс – Shaydoth

+0

@Shaydoth. Он автоматически отключит все элементы хешета. Вы можете себе представить, когда вы сериализуете объект, который он вызывает сериализуем на всех его членах рекурсивно. Он сериализуется таким же образом. Но убедитесь, что вы пытаетесь сериализовать инструменты Serializable – Javant

+0

, поэтому вы можете предположить, что, когда я ее неанеализую, я должен удалить данные обратно в хэшсет, а затем снова перевернуть каждую часть хэшета в объект класса? – Shaydoth