Hashtable Serialization (Server/Client App)

by nsyed » Wed, 14 Apr 2010 03:38:47 GMT


Sponsored Links
 Hi All,

I am having a weird issue with serialization of a Hashtable. I have
made a Server, Client app. Where server(PC/MAC) is serializing a
Hashtable and sending it to Client(Android) through UDP. The data is
sent/read correctly but I get a bunch of these messages below on
LogCat.

04-12 11:19:43.059: DEBUG/dalvikvm(407): GetFieldID: unable to find
field Ljava/util/Hashtable;.loadFactor:F

Occasionally, I would see these

04-12 11:21:19.150: DEBUG/dalvikvm(407): GC freed 10814 objects /
447184 bytes in 97ms

The app would run for 2-3 mins and then crash. Interestingly enough I
do not see the Loadfactor errors on SDK 1.5. But I do see the GC Free
xxxx objects, quiet often.

After debugging I have found that the issue is with de-serialization
and the error/warning are coming from following code

Code:

ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
object = ois.readObject();
at Code:

object = ois.readObject();
on the client. My server is serializing code is the following.

Code:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
Any idea what is going on?

Thanks for the Help!

--



Hashtable Serialization (Server/Client App)

by Bob Kerns » Thu, 15 Apr 2010 01:23:50 GMT


 I don't have a solution, but I have a couple of recommendations --
either of which would avoid the problem.

#1 - don't use object serialization. Convert to an XML or JSON
representation instead. XML in particular would be preferred if you're
going to store these for an extended time.

#2 -- don't use Hashtable. It is a holdover from the early days of
Java, but it has inappropriate synchronization on various methods.
Use HashMap instead. This won't usually result in any other changes to
your code. If you were depending on the method synchronization of
Hashtable, you should take a good look at your code; it's likely you
weren't doing it right, and synchronizing on the table (or a larger-
scoped object) across a larger set of operations will fix bugs you may
not know you have. The synchronizing built into Hashtable is seldom
the actual synchronization needed!

Nothing in your message really suggests that your crash is related to
the message about serialization. If the loadfactor for the Hashtable
is set to zero, I suspect that would cause problems, but if it ends up
initialized to some reasonable default, this would be harmless. You
could check in the debugger pretty easily

The GC messages are not related to your problem. They indicate that
your program is causing the GC to run; this is of interest for
optimizing or analyzing performance.




--


Sponsored Links


Hashtable Serialization (Server/Client App)

by priyanka » Fri, 23 Apr 2010 13:17:27 GMT


 i All,

I am observing a similar issue. I get structured data from my server
to Android client in XML format. I parse the XML into a HashMap, and
save this HashMap object in file persistent storage. Now, when I
retrieve this HashMap object saved in file through :
HashMap<String, Object> hashMap = (HashMap<String, Object>)
objectInputStream.readObject();

I get
GetFieldID: unable to find field Ljava/util/HashMap;.loadFactor:F


for about 150 times (interspersed with about 2 GC freed commands); and
then I am able to read my object. I am not getting any crash, but I
suppose this might be slowing my app. And I am wondering how I can
resolve this. Any clues would be appreciated.

Thanks,
Priyanka


On Apr 14, 11:30pm, Naqi Syed <naqis...@gmail.com> wrote:
> >



Other Threads

1. Touchscreen Input event processing in Android

Hi Guys,

I'll be grateful if someone can explain that how the JNI layer (Native
layer) gets notified by the touchscreen driver when a touchscreen
event occurs? Any documentation or API flow chart on this will be of
great help.


Thanks in advance

Leo



--~--~---------~--~----~------------~-------~--~----~
unsubscribe: android-kernel+unsubscr...@googlegroups.com
website: 

2. O_SYNC flag doens't make cached memory uncached

If we define a memory as cached in
According to comments in android_pmem.h ,

   /* set to indicate maps of this region should be cached, if a mix
of
    * cached and uncached is desired, set this and open the device
with
    * O_SYNC to get an uncached region */

if we want to use a mix and make some region un-cached , we can use
O_SYNC flag for that.
But I am gettign the same bahavior as cached even after using O_SYNC
flag. ( I did not evne used a mix , I just made a memory cached and
used O_SYNC flag to use it as uncached , but the behavior I got was of
cached )

In POSIX , we have 3 flags O_SYNC, O_RSYNC , O_DSYNC and Linux
actually only supports O_SYNC and Linux's O_SYNC is actually POSIX
O_DSYNC.


Is that the reason O_SYNC may not be working fine to make memory
uncached ?

--~--~---------~--~----~------------~-------~--~----~
unsubscribe: android-kernel+unsubscr...@googlegroups.com
website: 

3. transform a standard linux kernel on Android kernel

4. Setting ImageView from the web using URI

5. ask ROM hero with market

6. How can I capture an image in Android and have it show up in the gallery?

7. PendingIntent.send(context, code, intent)