Ainvox Ainvox - 4 years ago 92
Java Question

Know the amount of objects Serializable from file

I am reading objects from a file using Serializable:

public ArrayList<Object> deserialzePerson(String filename) {
Object obj = null;
ObjectInputStream ois;
try {
ois = new ObjectInputStream(new FileInputStream(filename));
for (int i = 0; i < 100; i++) {
obj = (Object) ois.readObject();
ObjectArray.add(obj);
}
} catch (Exception e) {
}
return ObjectArray;
}


However, I do not know the amount of objects in the file and use the number "100" in the for-loop. If there are less than 100, the exception will kick in and everything goes as expected. Nevertheless, I find this solution poor because it depends on catching errors. Is there a way to set the limit of the for-loop for the amount of objects in the file?

For instance, when reading from a .txt file I used
.hasNext();
is there something like this for objects?

Answer Source
public void serializePerson(String filename, List<Person> persons) {
    try (FileOutputStream fos = new FileOutputStream(filename);
         ObjectOutputStream ous = new ObjectOutputStream(fos)) {

        ous.writeInt(persons.size());
        for (Person person : persons) {
            ous.writeObject(person);
        }
    } catch (Exception e) {
    }
}

public List<Person> deserializePerson(String filename) {
    List<Person> result = new ArrayList<>();
    try (FileInputStream fis = new FileInputStream(filename);
         ObjectInputStream ois = new ObjectInputStream(fis)) {
        int size = ois.readInt();
        for (int i = 0; i < size; i++) {
            Person person = (Person) ois.readObject();
            result.add(person);
        }
    } catch (Exception e) {
    }
    return result;
}
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download