Reputation: 93
So i'm trying to write out an object to a ByteArray, but for some reason it's not writting anything, which i see by the fact that the return value is 0, and that by the fact that reading it results in an exception.
BAoutput = new ByteArrayOutputStream();
Oout = new ObjectOutputStream(BAoutput);
Oout.writeObject(receiver);
where receiver
is an object i get through a parameter.
and the exceptions are always the same:
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
Any ideas?
most of the code: (there are a couple of definitions above it, nothing interesting really)
try {
BAoutput = new ByteArrayOutputStream();
Oout = new ObjectOutputStream(BAoutput);
BAinput = new ByteArrayInputStream(BAoutput.toByteArray());
Oin = new ObjectInputStream(BAinput);
Oout.writeObject(receiver);
retval = method.invoke(receiver, args);
for (Method curr: postMethods){
curr.setAccessible(true);
if (curr.invoke(receiver).equals(false)){
receiver = Oin.readObject();
throw new PostconditionFailure();
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
Oin.close();
Oout.close();
BAinput.close();
BAoutput.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Upvotes: 0
Views: 4819
Reputation: 718826
This is not making a lot of sense to me.
So i'm trying to write out an object to a ByteArray, but for some reason it's not writting anything, which i see by the fact that the return value is 0
What is returning 0? The writeObject
method does not return any value at all - its a void
method!
... and that by the fact that reading it results in an exception.
That doesn't necessarily mean that the write failed.
I think we need to see >>>all<<< of the code that is involved with the reading and the writing, including type declarations and any enclosing try / catch blocks.
EDIT
Now that I see the complete code, it is clear what the real problem is:
....
BAoutput = new ByteArrayOutputStream();
Oout = new ObjectOutputStream(BAoutput);
BAinput = new ByteArrayInputStream(BAoutput.toByteArray());
Oin = new ObjectInputStream(BAinput);
...
The ByteArrayOutputStream.toByteArray()
method returns a copy of the current contents of the stream. Since nothing has been written to the stream yet, the byte array is naturally empty.
The solution to your problem is to extract the byte array and construct the ByteArrayInputStream
after you have finished writing to Oout
and have flushed or closed it.
Upvotes: 0
Reputation: 114777
First things to check:
receiver
is Serializable (or a primitive type)Upvotes: 1