/** * DO NOT call symbolTable.addReference in writeObject as this (may) result in a * concurrentModificationException. * * <p>All references should be created in the constructor */ public void writeObject(DataOutput out) throws IOException { boolean sgIO = node instanceof com.sun.j3d.utils.scenegraph.io.SceneGraphIO; out.writeBoolean(sgIO); out.writeInt(symbol.nodeID); int nodeClassID = control.getNodeClassID(node); out.writeShort(nodeClassID); if (nodeClassID == -1) out.writeUTF(nodeClassName); writeConstructorParams(out); if (sgIO) { ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); DataOutputStream tmpOut = new DataOutputStream(byteStream); ((com.sun.j3d.utils.scenegraph.io.SceneGraphIO) node).writeSceneGraphObject(tmpOut); tmpOut.close(); out.writeInt(byteStream.size()); out.write(byteStream.toByteArray()); } writeUserData(out); writeString(node.getName(), out); writeCapabilities(out); }