ObjectIn/OutputStream improvements
Robert Stupp
snazy at snazy.de
Wed Jan 22 22:11:59 UTC 2014
I found another location in OOS code that might be an optimization point:
In java.io.ObjectOutputStream.BlockDataOutputStream#write(byte[], int, int, boolean) the first lines look like this:
if (!(copy || blkmode)) { // write directly
drain();
out.write(b, off, len);
return;
}
The block is executed a lot and prevents effective buffering in the internal "byte[] buf" field. I've replaced it with
if (!(copy || blkmode)) { // write directly
if (len + pos <= MAX_BLOCK_SIZE) {
System.arraycopy(b, off, buf, pos, len);
pos += len;
}
else {
drain();
out.write(b, off, len);
}
return;
}
and it works - at least for our application. I've no idea what that "if" was originally for.
Another point of optimization would be to either introduce "readResolve()" in primitive wrapper classes (Boolean, Byte, Character, Short, Integer, Long) or add some support to handle primitive wrapper classes in java.io.ObjectInputStream#readOrdinaryObject. The current implementation creates new (senseless?) instances of these wrapper classes. This changes deserialization semantics (no distinct object references for those classes) - maybe it should be delayed to "serialization 2.0"?
-Robert
Am 07.01.2014 um 10:05 schrieb Chris Hegarty <chris.hegarty at oracle.com>:
> Did you attach the diffs? I don’t see any attachment, it may be that the attachment was stripped. Can you try resending inline?
More information about the core-libs-dev
mailing list