Re: hashmap serialize
gg wrote:
I am using jdk 1.6 and thought serializing hashmap would be a cinch
I got
There is no "class" declaration (e.g., "public class RegexTest{").
HashMap<String, RegexRecord> myRegexHolder;
There is no "import" declaration for java.util.HashMap.
String sRegexHolderFile = "c:\data\.regexHolderObj.ser";
if ( (new java.io.File(strRegexHolderObjFSpec)).exists()) {
// restore myRegexHolder previously serialized
boolean bFailed = false;
What's with the "b" prefix? The declaration "boolean" already makes it clear
that it's a boolean.
try {
// read and deserialize the blob
FileInputStream fileIn = new
FileInputStream(strRegexHolderObjFSpec);
ObjectInputStream ois = new ObjectInputStream(fileIn);
myRegexHolder = (HashMap<String, regextest.RegexRecord>)
ois.readObject();
// oops Got warning: D:\proj\Util\RegexTest\src\regextest\RegexTest.java:55:
warning: [unchecked] unchecked cast
You really can't cast generically, it's one of Java's little eccentricities.
//myRegexHolder = myRegexHolder.readObject(ois);
I'm pretty sure that uncommenting this line would give an access violation for
the attempt to invoke a private method of myRegexHolder.
ois.close();
} catch (ClassNotFoundException ex) {
setStatus("Exception in deSerializing myRegexHolder: " +
ex.getMessage());
ex.printStackTrace();
bFailed = true;
} catch (IOException ex) {
setStatus("Exception in deSerializing myRegexHolder - IO
error: " + ex.getMessage());
ex.printStackTrace();
bFailed = true;
}
if ( bFailed == false)
What's the problem with saying "if ( ! bFailed )"?
setStatus("restore myRegexHolder successfully from user file");
} else {
// create empty myRegexHolder
myRegexHolder = new HashMap<String, RegexRecord>(180,
(float)0.75);
Ooh, magic numbers!
Seriously, how did you arrive at these values?
setStatus("Created myRegexHolder successfully for initial
capacity of 180 and 75% load factor");
};
}
...... some processing that results adding, updating the hsahmap of
myRegexHolder
.... before closing or at user request save the hashmap\ to external file
These lines won't compile.
private void saveRegexHolder() {
//serialize myRegexHolder
myRegexHolder.writeToObject();
// oops , error: D:\proj\Util\RegexTest\src\regextest\RegexTest.java:499:
cannot find symbol
You should copy and paste the exact error message instead of paraphrashing.
Cannot find /what/ symbol?
)
......
This line will not compile.
}
please help, thank you for your time and effort
Several issues:
You did not provide a compilable example. You've been around this group long
enough to have heard of an SSCCE:
<http://www.physci.org/codes/sscce.html>
They really do help.
You called writeToObject(), not writeObject(java.io.ObjectOutputStream).
First, HashMap has no method writeToObject(); it makes no sense to call
methods that don't exist. Second, writeObject() is a private method; you
cannot call it from an instance of a different class.
In the line:
String sRegexHolderFile = "c:\data\.regexHolderObj.ser";
you neglected to escape the backslashes. The actual string in
sRegexHolderFile (why the useless leading 's'?) will contain no path separator
characters. To get a backslash into a String you need to double it:
String sRegexHolderFile = "c:\\data\\.regexHolderObj.ser";
You will be unable to locate the file with the unescaped backslashes. Check out
<http://java.sun.com/docs/books/tutorial/java/nutsandbolts/datatypes.html>
Happy to help.
--
Lew