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

📄 sgzreader.java

📁 cisco-2950交换机的应用程序的源代码
💻 JAVA
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi 
// Source File Name:   SgzReader.java

package cisco.dsbu.cms.boot.internal;

import java.io.*;
import java.util.zip.GZIPInputStream;
import java.util.zip.InflaterInputStream;

// Referenced classes of package cisco.dsbu.cms.boot.internal:
//            SignatureVerifier

public class SgzReader
{

    private static final String SIG_FILENAME = "SIG";
    private InflaterInputStream gis;
    private byte buf[];
    private String elementName;
    private int elementSize;
    private SignatureVerifier verifier;
    private boolean firstExternalCall;
    private byte elementData[];
    private int elementStatus;

    public SgzReader(InputStream inputstream)
        throws IOException
    {
        gis = new GZIPInputStream(inputstream);
        buf = new byte[1024];
        initSignature();
        firstExternalCall = true;
    }

    public String getNextElement()
        throws IOException
    {
        if(firstExternalCall)
        {
            firstExternalCall = false;
            return elementName;
        } else
        {
            readNextElementInfo();
            verifier.advance();
            return elementName;
        }
    }

    private void readNextElementInfo()
        throws IOException
    {
        skipElementData();
        if(read(buf, 0, 2) != 2)
        {
            elementName = null;
            elementSize = -1;
            elementData = null;
            return;
        }
        int i = get2(0);
        if(buf.length < i)
        {
            int j;
            for(j = buf.length; j < i; j *= 2);
            buf = new byte[j];
        }
        if(read(buf, 0, i) != i)
        {
            elementName = null;
            elementSize = -1;
            elementData = null;
            return;
        }
        elementName = new String(buf, 0, i);
        if(read(buf, 0, 4) != 4)
        {
            elementName = null;
            elementSize = -1;
            elementData = null;
            return;
        } else
        {
            elementSize = (int)get4(0);
            elementData = null;
            return;
        }
    }

    public int getElementSize()
    {
        return elementSize;
    }

    public byte[] getElementData()
        throws IOException
    {
        if(elementData != null)
            return elementData;
        elementData = new byte[elementSize];
        if(read(elementData, 0, elementSize) != elementSize)
            return null;
        else
            return elementData;
    }

    public int getElementStatus()
        throws IOException
    {
        int i = verifier.verify(getElementData());
        if(i == 2)
            System.out.println("Signature error for " + elementName);
        return i;
    }

    public void close()
        throws IOException
    {
        gis.close();
    }

    private void initSignature()
        throws IOException
    {
        verifier = new SignatureVerifier();
        readNextElementInfo();
        if(elementName == null || !elementName.equals("SIG"))
        {
            return;
        } else
        {
            verifier.init(getElementData());
            readNextElementInfo();
            return;
        }
    }

    private void skipElementData()
        throws IOException
    {
        if(elementData != null)
            return;
        if(elementSize == 0)
        {
            return;
        } else
        {
            skip(elementSize);
            return;
        }
    }

    private long skip(long l)
        throws IOException
    {
        long l1 = 0L;
        long l2;
        for(; l > 0L; l -= l2)
        {
            l2 = gis.skip(l);
            if(l2 < 0L)
                break;
            l1 += l2;
        }

        return l1;
    }

    private int read(byte abyte0[], int i, int j)
        throws IOException
    {
        int k = 0;
        int l;
        for(; j > 0; j -= l)
        {
            l = gis.read(abyte0, i, j);
            if(l < 0)
                break;
            k += l;
            i += l;
        }

        return k;
    }

    private int get2(int i)
    {
        return buf[i] & 0xff | (buf[i + 1] & 0xff) << 8;
    }

    private long get4(int i)
    {
        return (long)(buf[i] & 0xff | (buf[i + 1] & 0xff) << 8) | (long)(buf[i + 2] & 0xff) << 16 | (long)(buf[i + 3] & 0xff) << 24;
    }
}

⌨️ 快捷键说明

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