babis85@gmail.com wrote:
Hello, i have a client/server application and i would like to be able
to write to the serverSocket an object of type myObject and then from
the case of the server i would like to read it.
Knute Johnson wrote:
To send objects around on streams they need to be Serializable and you
use ObjectInputStream/ObjectOutputStreams to read and write them.
babis85@gmail.com wrote:
ObjectInput/OutputStream says sth about the reading/writing of
objects that have static members, but i didn't catch the point. Would
there be a problem for these objects?
Knute Johnson wrote:
The docs appear to contradict themselves;
public final Object readObject()
throws IOException,
ClassNotFoundException
Read an object from the ObjectInputStream. The class of the
object, the signature of the class, and the values of the
non-transient and non-static fields of the class and all of its
supertypes are read.
So I can't answer your question. I'm sure somebody will chime up here
though to give you an answer.
There is no contradiction - the docs state that these methods do not
handle static fields. (Nor transient fields, but that's the point of
"transient".)
The point of serializtion is to handle object state. It wouldn't make
sense to serialize or deserialize class state with an object. Class
state belongs to the whole class. The class will already have its state
at the moment of object serialization/deserialization; the object is
expected to fit within that state.
An object that needs to influence class state during deserialization,
say to register itself, can do so in the readObject() method. It is
possible that such coupling between object and class state represents a
design flaw.
- Lew
Well stupid me, I mis-read it. It says non-static. You know this is
really very interesting. I have never tried to serialize any classes
that had static fields and never really thought about it. One could get
oneself into a very interesting pickle with this if one wasn't careful.