/** * Write the non-static and non-transient fields of the current class to * this stream. This may only be called from the writeObject method of the * class being serialized. It will throw the NotActiveException if it is * called otherwise. * * @throws IOException if I/O errors occur while writing to the underlying * <code>OutputStream</code> */ public void defaultWriteObject() throws IOException { SerialCallbackContext ctx = curContext; if (ctx == null) { throw new NotActiveException("not in call to writeObject"); } Object curObj = ctx.getObj(); ObjectStreamClass curDesc = ctx.getDesc(); bout.setBlockDataMode(false); defaultWriteFields(curObj, curDesc); bout.setBlockDataMode(true); }
/** * Retrieve the object used to buffer persistent fields to be written to * the stream. The fields will be written to the stream when writeFields * method is called. * * @return an instance of the class Putfield that holds the serializable * fields * @throws IOException if I/O errors occur * @since 1.2 */ public ObjectOutputStream.PutField putFields() throws IOException { if (curPut == null) { SerialCallbackContext ctx = curContext; if (ctx == null) { throw new NotActiveException("not in call to writeObject"); } Object curObj = ctx.getObj(); ObjectStreamClass curDesc = ctx.getDesc(); curPut = new PutFieldImpl(curDesc); } return curPut; }
/** * Writes externalizable data of given object by invoking its * writeExternal() method. */ private void writeExternalData(Externalizable obj) throws IOException { PutFieldImpl oldPut = curPut; curPut = null; if (extendedDebugInfo) { debugInfoStack.push("writeExternal data"); } SerialCallbackContext oldContext = curContext; try { curContext = null; if (protocol == PROTOCOL_VERSION_1) { obj.writeExternal(this); } else { bout.setBlockDataMode(true); obj.writeExternal(this); bout.setBlockDataMode(false); bout.writeByte(TC_ENDBLOCKDATA); } } finally { curContext = oldContext; if (extendedDebugInfo) { debugInfoStack.pop(); } } curPut = oldPut; }