private MemberModel() { // init memberMap memberMap = new HashMap<>(); // init entitledMap (1 to many relation between memberID and BookNumber) entitledMap = new HashMap<>(); boolean readFlag = false; ObjectInputStream oin = null; Member tm; String[] sa = new String[3]; try { oin = new ObjectInputStream(new FileInputStream("members1.dat")); readFlag = true; } catch (Exception e) { e.printStackTrace(); } // read in from file while (readFlag) { try { // Read a member data from inputstream // Structure for reading // __________________________________________________________ // |String|String|String|Boolean or Double|ArrayList<String>| // ---------------------------------------------------------- sa[ID_INDEX] = oin.readUTF(); sa[TITLE_INDEX] = oin.readUTF(); sa[PHONENO_INDEX] = oin.readUTF(); if (sa[ID_INDEX].indexOf("STA") != -1) { tm = new Staff(sa[ID_INDEX], sa[TITLE_INDEX], sa[PHONENO_INDEX]); ((Staff) tm).setBookOverdue(oin.readBoolean()); } else { tm = new Student(sa[ID_INDEX], sa[TITLE_INDEX], sa[PHONENO_INDEX]); ((Student) tm).setFinesOwing(oin.readDouble()); } // Raw data map without relationship to book memberMap.put(tm.getMemberID(), tm); // Map for storing relation entitledMap.put(tm.getMemberID(), (ArrayList<String>) oin.readObject()); } catch (EOFException e) { Log.e(e.getMessage()); readFlag = false; } catch (Exception e) { Log.e(e.getMessage()); } } try { oin.close(); } catch (IOException e) { e.printStackTrace(); } }