Solved
ObjectInputStream getting EOFException
Posted on 2006-11-06
What I'm attempting to do is read in a serialized object (in this case hashtable) from a file and add a new element to it and rewrite it back to the file with the updated hashtable, then later I will go back through and remove the elements from the hashtable in the temporary file when i don't need them in processing anymore. I'm getting an EOFException when trying to read in the object.
Note: The first time it hits the EOFException, i was assuming that the hashtable had not been added to the file at that time so I add a new one. But it seems to hit EOFException every time without pulling the hashtable, so in other words it's like it's writing a new hashtable everytime it's run.
FileInputStream filein = null;
FileOutputStream fileout = null;
ObjectOutputStream objout = null;
ObjectInputStream objin = null;
SecretKey key = null;
try {
response.setContentType("text/html");
out = response.getWriter();
// create encryption key
key = KeyGenerator.getInstance("DES").generateKey();
// read in key file
filein = new FileInputStream(filepath);
fileout = new FileOutputStream(filepath);
objout = new ObjectOutputStream(fileout);
objin = new ObjectInputStream(filein);
// read in hashtable of member ids and keys
mem_keys = (Hashtable)objin.readObject();
mem_keys.put(member.member_id, key); // add the new member to the hashtable
objout.writeObject(mem_keys); // write back out
// init the DES encryptor
DesEncrypter des = new DesEncrypter(key);
if(password.compareTo(confirm) == 0) {
// encrypt password using SecretKey DES encryptor
member.password = des.encrypt(password);
}
}
catch(EOFException e) {
// to print the error to screen
//out.println("<PRE>" + e.getMessage() + "<BR>");
//e.printStackTrace(out);
// since we are keeping only one hashtable in the file
// and it's end of file, then no objects where found so create new hashtable to add to
mem_keys = new Hashtable();
mem_keys.put("" + member.member_id, key);
try {
objout.writeObject(mem_keys.clone());
}
catch(Exception ex) {
out.println("<PRE>" + ex.getMessage() + "<BR>");
ex.printStackTrace(out);
}
}
catch(IOException e) {
out.println("<PRE>" + e.getMessage() + "<BR>");
e.printStackTrace(out);
}
catch(Exception e) {
out.println("<PRE>" + e.getMessage() + "<BR>");
e.printStackTrace(out);
}
// clean up
try {
objin.close();
filein.close();
objout.flush();
objout.close();
fileout.close();
}
catch(Exception e) {
out.println("<PRE>" + e.getMessage() + "<BR>");
e.printStackTrace(out);
}
Any thoughts? thanks