public final void externalize ( OutputStream os , boolean compress , boolean headers ) throws IOException { // First, print headers if ( headers ) { PrintWriter pw = new PrintWriter ( new OutputStreamWriter ( os , Util . UTF8 ) ) ; pw . println ( "HTTP/1.0 200 OK" ) ; pw . println ( "XDAP: " + ServerVersion . DAP2_PROTOCOL_VERSION ) ; pw . println ( "XDODS-Server: DODS/" + ServerVersion . DAP2_PROTOCOL_VERSION ) ; pw . println ( "Content-type: application/octet-stream" ) ; pw . println ( "Content-Description: dods-data" ) ; if ( compress ) { pw . println ( "Content-Encoding: deflate" ) ; } pw . println ( ) ; pw . flush ( ) ; } // Buffer the output stream for better performance OutputStream bufferedOS ; if ( compress ) { // need a BufferedOutputStream - 3X performance - LOOK: why ?? bufferedOS = new BufferedOutputStream ( new DeflaterOutputStream ( os ) ) ; } else { bufferedOS = new BufferedOutputStream ( os ) ; } // Redefine PrintWriter here, so the DDS is also compressed if necessary PrintWriter pw = new PrintWriter ( new OutputStreamWriter ( bufferedOS , Util . UTF8 ) ) ; print ( pw ) ; // pw.println("Data:"); // JCARON CHANGED pw . flush ( ) ; bufferedOS . write ( "\nData:\n" . getBytes ( CDM . utf8Charset ) ) ; // JCARON CHANGED bufferedOS . flush ( ) ; // Use a DataOutputStream for serialize DataOutputStream dataOS = new DataOutputStream ( bufferedOS ) ; for ( Enumeration e = getVariables ( ) ; e . hasMoreElements ( ) ; ) { ClientIO bt = ( ClientIO ) e . nextElement ( ) ; bt . externalize ( dataOS ) ; } // Note: for DeflaterOutputStream, flush() is not sufficient to flush // all buffered data dataOS . close ( ) ; }
Dump the dataset using externalize methods . This should create a multipart Mime document with the binary representation of the DDS that is currently in memory .