📄 sgzreader.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 + -