读取长度:
this.length = DerInputStream.getLength(i & 0xFF, paramInputStream);
static int getLength(int paramInt, InputStream paramInputStream)
throws IOException
{
int j = paramInt; int i;
if ((j & 0x80) == 0) {
i = j;
} else {
j &= 127;
if (j == 0)
return -1;
if ((j < 0) || (j > 4)) {
throw new IOException("DerInputStream.getLength(): lengthTag=" + j + ", " + ((j < 0) ? "incorrect DER encoding." : "too big."));
}
for (i = 0; j > 0; --j) {
i <<= 8;
i += (0xFF & paramInputStream.read());
}
}
return i;
}
写入长度:
public void putLength(int paramInt)
throws IOException
{
if (paramInt < 128) {
write((byte)paramInt);
}
else if (paramInt < 256) {
write(-127);
write((byte)paramInt);
}
else if (paramInt < 65536) {
write(-126);
write((byte)(paramInt >> 8));
write((byte)paramInt);
}
else if (paramInt < 16777216) {
write(-125);
write((byte)(paramInt >> 16));
write((byte)(paramInt >> 8));
write((byte)paramInt);
}
else {
write(-124);
write((byte)(paramInt >> 24));
write((byte)(paramInt >> 16));
write((byte)(paramInt >> 8));
write((byte)paramInt);
}
}