⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 outputlog.java

📁 fortran并行计算包
💻 JAVA
字号:
/* *  (C) 2001 by Argonne National Laboratory *      See COPYRIGHT in top-level directory. *//* *  @author  Anthony Chan */package logformat.slog2.output;import java.io.*;import base.io.MixedRandomAccessFile;import base.io.BufArrayOutputStream;import base.io.MixedDataOutputStream;import base.io.DataIO;import base.io.MixedDataIO;import base.drawable.TimeBoundingBox;import logformat.slog2.*;public class OutputLog{    private MixedRandomAccessFile  rand_file;    private BufArrayOutputStream   bary_outs;    private MixedDataOutputStream  data_outs;    private Header                 filehdr;    private TreeDir                treedir;    // Last Treenode's FileBlockPtr    private FileBlockPtr           node_blockptr;    public OutputLog( String filename )    {        rand_file = null;        try {            rand_file = new MixedRandomAccessFile( filename, "rw" );        // } catch ( FileNotFoundException ferr ) {        } catch ( IOException ferr ) {            ferr.printStackTrace();            System.exit( 1 );        }                filehdr        = new Header();        /*           Const.LEAF_BYTESIZE is the INITIAL size for           BufArrayOutputStream's buffer which can still grow as needed        */        bary_outs      = new BufArrayOutputStream(                                 filehdr.getTreeLeafByteSize() );        data_outs      = new MixedDataOutputStream( bary_outs );        treedir        = new TreeDir();        node_blockptr  = null;        // Write the initialized Header to Disk        this.writeHeader();    }    public void setTreeLeafByteSize( int in_bytesize )    {        filehdr.setTreeLeafByteSize( in_bytesize );        bary_outs      = new BufArrayOutputStream(                                  filehdr.getTreeLeafByteSize() );        data_outs      = new MixedDataOutputStream( bary_outs );    }    public int getTreeLeafByteSize()    {        return filehdr.getTreeLeafByteSize();    }    public void setNumChildrenPerNode( short num_leafs )    {        filehdr.setNumChildrenPerNode( num_leafs );    }    public short getNumChildrenPerNode()    {        return filehdr.getNumChildrenPerNode();    }    public void writeTreeNode( TreeNode treenode )    {        TreeNodeID             treedir_key;        TreeDirValue           treedir_val;        TimeBoundingBox        timebox;        try {            // Save the LAST input TreeNode's FileBlockPtr            node_blockptr = new FileBlockPtr( rand_file.getFilePointer(),                                              treenode.getNodeByteSize() );        } catch ( IOException ioerr ) {            ioerr.printStackTrace();            System.exit( 1 );        }        // Create key and value pair for the TreeDir        treedir_key   = new TreeNodeID( treenode.getTreeNodeID() );        timebox = new TimeBoundingBox( treenode );        treedir_val   = new TreeDirValue( timebox, node_blockptr );        treedir.put( treedir_key, treedir_val );        // Reset various file pointers of the TreeNode before writing to file        treenode.setFileBlockPtr( node_blockptr.getFilePointer(),                                  node_blockptr.getBlockSize() );        // treenode's mergeVerticalShadowBufs() and shiftHorizontalShadowBuf()        // updates ShadowBufs which are NOT being saved to disk in this call.        // Merge ShadowBufs Vertically from childnode's        treenode.mergeVerticalShadowBufs();        // The TreeNode.shiftHorizontalShadowBuf() has to be called        // after TreeNode.setFileBlockPtr( node_blockptr )        treenode.shiftHorizontalShadowBuf();        // System.err.println( "OutputLog.writeTreeNode("        //                   + treenode.getTreeNodeID() + "): START" );        // Clear any unwritten data in BufArrayOutputStream's buffer        bary_outs.reset();        try {            // Save TreeNode to BufArrayOutputStream through DataOutputStream            treenode.writeObject( data_outs );            data_outs.flush();            // Copy the content of BufArrayOutputStream to RandomAccessFile            rand_file.write( bary_outs.getByteArrayBuf(),                             0, bary_outs.size() );            if ( bary_outs.size() > filehdr.getMaxBufferByteSize() )                filehdr.setMaxBufferByteSize( bary_outs.size() );        } catch ( IOException ioerr ) {            ioerr.printStackTrace();            System.exit( 1 );        }        // System.err.println( "OutputLog.writeTreeNode("        //                   + treenode.getTreeNodeID() + "): END" );        /* debugging */        // System.out.println( "\n" + treenode.toString() + "\n" );        // System.out.flush();    }    private void writeFilePart( final MixedDataIO   filepart,                                      FileBlockPtr  blockptr )    {        int          blocksize  = 0;        try {            // Update FilePointer of the Header's FileBlockPtr to "filepart"             blockptr.setFilePointer( rand_file.getFilePointer() );        } catch ( IOException ioerr ) {            ioerr.printStackTrace();            System.exit( 1 );        }        // Clear any unwritten data in BufArrayOutputStream's buffer        bary_outs.reset();        try {            // filepart.writeObject() needs a MixedDataOutput type argument            filepart.writeObject( data_outs );            data_outs.flush();            // Copy the content of BufArrayOutputStream to RandomAccessFile            rand_file.write( bary_outs.getByteArrayBuf(),                             0, bary_outs.size() );            if ( bary_outs.size() > filehdr.getMaxBufferByteSize() )                filehdr.setMaxBufferByteSize( bary_outs.size() );            blocksize = (int)( rand_file.getFilePointer()                             - blockptr.getFilePointer() );        } catch ( IOException ioerr ) {            ioerr.printStackTrace();            System.exit( 1 );        }        // Update BlockSize of the Header's FileBlockPtr to "filepart"        blockptr.setBlockSize( blocksize );        /* debugging */        // System.out.println( filepart.toString() );        // System.out.flush();    }    public void writeCategoryMap( final CategoryMap objdefs )    {        writeFilePart( objdefs, filehdr.blockptr2categories );    }    public void writeLineIDMapList( final LineIDMapList lineIDmaps )    {        writeFilePart( lineIDmaps, filehdr.blockptr2lineIDmaps );    }    private void writeTreeDir()    {        writeFilePart( treedir, filehdr.blockptr2treedir );    }    private void writeHeader()    {        // Update the Header if necessary        if ( node_blockptr != null ) {            filehdr.blockptr2treeroot.setFileBlockPtr(                node_blockptr.getFilePointer(), node_blockptr.getBlockSize() );            filehdr.setMaxTreeDepth( treedir.getTreeRootID().depth );        }        // Clear any unwritten data in BufArrayOutputStream's buffer        bary_outs.reset();        try {            filehdr.writeObject( data_outs );            data_outs.flush();            // Copy the content of BufArrayOutputStream to RandomAccessFile            rand_file.seek( 0 );            rand_file.write( bary_outs.getByteArrayBuf(),                             0, bary_outs.size() );        } catch ( IOException ioerr ) {            ioerr.printStackTrace();            System.exit( 1 );        }    }    public void close()    {        this.writeTreeDir();        // System.out.println( treedir.toString() );        this.writeHeader();        System.out.println( filehdr.toString() );        try {            // ? data_outs.close() calls bary_outs.close();            data_outs.close();            rand_file.close();        } catch ( IOException ioerr ) {            ioerr.printStackTrace();            System.exit( 1 );        }    }    protected void finalize() throws Throwable    {        try {            close();        } finally {            super.finalize();        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -