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

📄 view8211.java

📁 OpenMap是一个基于JavaBeansTM的开发工具包。利用OpenMap你就能够快速构建用于访问legacy数据库的应用程序与applets。OpenMap提供了允许用户查看和操作地理空间信息的
💻 JAVA
字号:
/* **************************************************************************** * $Id: View8211.java,v 1.3.2.3 2005/08/04 18:13:33 dietrick Exp $ * * Project:  SDTS Translator * Purpose:  Example program dumping data in 8211 data to stdout. * Author:   Frank Warmerdam, warmerda@home.com * ****************************************************************************** * Copyright (c) 1999, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************** */package com.bbn.openmap.dataAccess.iso8211;import com.bbn.openmap.layer.vpf.MutableInt;import com.bbn.openmap.util.Debug;import java.io.IOException;import java.util.Iterator;/** * Class that uses the DDF* classes to read an 8211 file and print out * the contents. */public class View8211 {    protected boolean bFSPTHack = false;    protected String pszFilename = null;    public View8211(String filename, boolean fspt_repeating) {        pszFilename = filename;        bFSPTHack = fspt_repeating;        view();    }    protected void view() {        DDFModule oModule;        try {            oModule = new DDFModule(pszFilename);            if (bFSPTHack) {                DDFFieldDefinition poFSPT = oModule.findFieldDefn("FSPT");                if (poFSPT == null)                    Debug.error("View8211: unable to find FSPT field to set repeating flag.");                else                    poFSPT.setRepeating(true);            }            /* -------------------------------------------------------------------- */            /* Loop reading records till there are none left. */            /* -------------------------------------------------------------------- */            DDFRecord poRecord;            int iRecord = 1;            while ((poRecord = oModule.readRecord()) != null) {                Debug.output("Record " + (iRecord++) + "("                        + poRecord.getDataSize() + " bytes)");                /* ------------------------------------------------------------ */                /* Loop over each field in this particular record. */                /* ------------------------------------------------------------ */                for (Iterator it = poRecord.iterator(); it != null                        && it.hasNext();                // Debug.output(((DDFField)it.next()).toString()));                viewRecordField(((DDFField) it.next())))                    ;            }        } catch (IOException ioe) {            Debug.error(ioe.getMessage());            ioe.printStackTrace();        }    }    /**     * Dump the contents of a field instance in a record.     */    protected void viewRecordField(DDFField poField) {        DDFFieldDefinition poFieldDefn = poField.getFieldDefn();        // Report general information about the field.        Debug.output("    Field " + poFieldDefn.getName() + ": "                + poFieldDefn.getDescription());        // Get pointer to this fields raw data. We will move through        // it consuming data as we report subfield values.        byte[] pachFieldData = poField.getData();        int nBytesRemaining = poField.getDataSize();        /* -------------------------------------------------------- */        /* Loop over the repeat count for this fields */        /* subfields. The repeat count will almost */        /* always be one. */        /* -------------------------------------------------------- */        for (int iRepeat = 0; iRepeat < poField.getRepeatCount(); iRepeat++) {            if (iRepeat > 0) {                Debug.output("Repeating (" + iRepeat + ")...");            }            /* -------------------------------------------------------- */            /* Loop over all the subfields of this field, advancing */            /* the data pointer as we consume data. */            /* -------------------------------------------------------- */            for (int iSF = 0; iSF < poFieldDefn.getSubfieldCount(); iSF++) {                DDFSubfieldDefinition poSFDefn = poFieldDefn.getSubfieldDefn(iSF);                int nBytesConsumed = viewSubfield(poSFDefn,                        pachFieldData,                        nBytesRemaining);                nBytesRemaining -= nBytesConsumed;                byte[] tempData = new byte[pachFieldData.length                        - nBytesConsumed];                System.arraycopy(pachFieldData,                        nBytesConsumed,                        tempData,                        0,                        tempData.length);                pachFieldData = tempData;            }        }    }    protected int viewSubfield(DDFSubfieldDefinition poSFDefn,                               byte[] pachFieldData, int nBytesRemaining) {        MutableInt nBytesConsumed = new MutableInt();        DDFDataType ddfdt = poSFDefn.getType();        if (ddfdt == DDFDataType.DDFInt) {            Debug.output("        "                    + poSFDefn.getName()                    + " = "                    + poSFDefn.extractIntData(pachFieldData,                            nBytesRemaining,                            nBytesConsumed));        } else if (ddfdt == DDFDataType.DDFFloat) {            Debug.output("        "                    + poSFDefn.getName()                    + " = "                    + poSFDefn.extractFloatData(pachFieldData,                            nBytesRemaining,                            nBytesConsumed));        } else if (ddfdt == DDFDataType.DDFString) {            Debug.output("        "                    + poSFDefn.getName()                    + " = "                    + poSFDefn.extractStringData(pachFieldData,                            nBytesRemaining,                            nBytesConsumed));        } else if (ddfdt == DDFDataType.DDFBinaryString) {            poSFDefn.extractStringData(pachFieldData,                    nBytesRemaining,                    nBytesConsumed); // pabyBString            Debug.output("        " + poSFDefn.getName());        }        return nBytesConsumed.value;    }    public static void main(String[] argv) {        Debug.init();        String pszFilename = null;        boolean bFSPTHack = false;        for (int iArg = 0; iArg < argv.length; iArg++) {            if (argv[iArg].equals("-fspt_repeating")) {                bFSPTHack = true;            } else {                pszFilename = argv[iArg];            }        }        if (pszFilename == null) {            Debug.output("Usage: View8211 filename\n");            System.exit(1);        }        new View8211(pszFilename, bFSPTHack);    }}

⌨️ 快捷键说明

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