2015-12-16 5 views
0

У меня проблема с сериализацией ... Я тестирую эти методы отдельно от класса и работал правильно! Но когда я использую этот класс получить NotSerializableExceptionNotSerializableException wiht HashMap serialize

Код:
свойство, которое должно быть сериализации:
public ArrayList<User> users;
Это свойство в UserManage класс

Этот метод для чтения из файла базы данных:

public void readFromDataBaseFile(){ 
    File database=new File(this.saveUsersObject+"\\"+"Database.txt"); 
    if(!database.exists()){ 
     System.out.println("Exception:FileNotExist"); 
    } 
    else{ 
     HashMap<String,Object> Data=(HashMap<String,Object>)FileHandler.readObjectInFile(database); 
     this.users= (ArrayList) Data.get("users"); 
    } 
} 

И этот метод для записи в файл базы данных:

public void writeToDataBaseFile(){ 
    File database=new File(this.saveUsersObject+"\\"+"Database.txt"); 
    if(!database.exists()) { 
     File parent=database.getParentFile(); 
     parent.mkdirs(); 
    } 
    HashMap<String,Object> Data=allOfUsersToHashMap(); 
    if(Data.isEmpty()){ 
     System.out.println("DataBase HashMap Is Empty!"); 

    } 
    else{ 
     FileHandler.writeObjectInFile(Data,database); 
    } 
} 

Вышеуказанные методы относятся к классу UserManage.

ниже метода является вспомогательным методом для написания объекта в файле:

  1. boolean writeObjectInFile(Object obj,File file):
public static boolean writeObjectInFile(Object obj,File file){ 
    String Path=file.getAbsolutePath(); 
    if(file.exists()){ 
     System.out.println("Object File Was Deleted!!"); 
     file.delete(); 
    } 
    else{ 
     try 
     { 

      FileOutputStream fileOut = new FileOutputStream(Path); 
      ObjectOutputStream out = new ObjectOutputStream(fileOut); 
      out.writeObject(obj); 
      out.close(); 
      fileOut.close(); 
      System.out.printf("Serialized data is saved To :"+file.getPath()); 
      return true; 
     }catch(IOException i) 
     { 
      i.printStackTrace(); 
     } 
    } 

    return false; 
} 

И ниже метода является вспомогательным методом для чтения объекта из файл:

  1. Object readObjectInFile(File file) :
public static Object readObjectInFile(File file) { 
    Object obj=null; 
    if(file.isFile()){ 
     try 
     { 

      FileInputStream fileIn = new FileInputStream(file); 
      ObjectInputStream in = new ObjectInputStream(fileIn); 
      System.out.println(file.getAbsoluteFile()); 
      obj=in.readObject(); 
      fileIn.close(); 
      in.close(); 
      System.out.printf("DeSerialized data is Done From:"+file.getPath()); 
     }catch(IOException i) 
     { 
      i.printStackTrace(); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 
    else { 
     System.out.println("returned null :\\"); 
     System.out.println("Enter Address Of A File Not Folder Or Another! :\\"); 
    } 
    return obj; 
} 

метод allOfUsersToHashMap() в классе UserManage:

public HashMap<String,Object> allOfUsersToHashMap(){ 
    HashMap<String,Object> Userdatabase=new HashMap<>(); 
    Userdatabase.put("users",this.users); 
    return Userdatabase; 
} 

я должен сказать, когда ArrayList<User> user является недействительным этот метод работал правильно, но когда пользователь не работают!

+2

Что такое определение класса 'User'? Он должен быть «Serializable» для работы со стандартными функциями сериализации. – birryree

+0

Можете ли вы проверить, является ли класс пользователя Serializable I.e., реализующим интерфейс Serializable? –

+0

Как вы думаете, когда я использую 'HashMap', нужно сериализовать' User' ?? @MadhusudanaReddySunnapu @birryree – MEAM

ответ

5

Если класс User не реализует интерфейс Serializable, ArrayList не сможет быть сериализован. См. JavaDoc for Serializable для деталей реализации: https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html

+0

Но я не использую этот класс для сериализации и сначала помещаю этот класс в хэш-карту, а затем передать этот «HashMap» другому статическому методу в другом классе, а затем сериализовать @ upcrob – MEAM

+0

'HashMap' сериализуем! http://stackoverflow.com/questions/13207376/is-hashtable-hashmap-serializable-in-java – MEAM

+1

@MEER: Это не имеет значения. «HashMap» сериализуем, конечно, но если один объект в «HashMap» не является сериализуемым, то он не будет работать. «Пользователь» все еще должен быть сериализуемым. –

Смежные вопросы