/** Save a serializable Java object to filename. */ bsh.help.save = "usage: save( object, filename )"; void save( Object obj, String filename ) { File file = pathToFile( filename ); if ( !(obj instanceof Serializable) ) { print("Type "+obj.getClass()+" is not serializable"); return; } // Detach bsh objects from the caller's namespace during serialization // NOTE: THIS IS NOT THREAD SAFE if ( obj instanceof bsh.This ) { super.parent = obj.namespace.getParent(); obj.namespace.prune(); } OutputStream out = new FileOutputStream( file ); ObjectOutputStream oout = new ObjectOutputStream(out); oout.writeObject( obj ); oout.close(); // Reattach bsh objects to the caller's namespace after serialization // NOTE: THIS IS NOT THREAD SAFE if ( obj instanceof bsh.This ) obj.namespace.setParent( super.parent ); }