classreader.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 119 行
JAVA
119 行
/*
* $Id: ClassReader.java,v 1.1 2004/02/15 11:06:18 epr Exp $
*/
package org.jnode.vm.classmgr;
/**
* @author Ewout Prangsma (epr@users.sourceforge.net)
*/
public final class ClassReader {
private final byte[] data;
private int pos;
//private final int length;
public ClassReader(byte[] data, int ofs, int length) {
this.data = data;
this.pos = ofs;
//this.length = length;
}
public final void skip(int delta) {
pos += delta;
}
public final int readu1() {
final int ofs = pos;
final int v = data[ofs] & 0xff;
pos = ofs + 1;
return v;
}
public final int readu2() {
final int ofs = pos;
final int v1 = data[ ofs] & 0xff;
final int v2 = data[ ofs + 1] & 0xff;
final int v = (v1 << 8) + v2;
pos = ofs + 2;
return v;
}
public final int readu4() {
final int ofs = pos;
final int v1 = data[ ofs] & 0xff;
final int v2 = data[ ofs + 1] & 0xff;
final int v3 = data[ ofs + 2] & 0xff;
final int v4 = data[ ofs + 3] & 0xff;
final int v = (v1 << 24) + (v2 << 16) + (v3 << 8) + v4;
pos = ofs + 4;
return v;
}
public final long readu8() {
final long l0 = readu4();
final long l1 = readu4();
return ((l0 & 0xFFFFFFFFL) << 32) | (l1 & 0xFFFFFFFFL);
}
public final byte[] readBytes(int length) {
byte[] res = new byte[ length];
System.arraycopy(data, pos, res, 0, length);
pos += length;
return res;
}
public final char[] readUTF() {
int utflen = readu2();
char str[] = new char[ utflen];
int count = 0;
int strlen = 0;
while (count < utflen) {
int c = data[pos++] & 0xFF;
int char2, char3;
switch (c >> 4) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
// 0xxxxxxx
count++;
str[ strlen++] = (char) c;
break;
case 12:
case 13:
// 110x xxxx 10xx xxxx
count += 2;
if (count > utflen)
throw new RuntimeException("Class Format Error (utf)");
char2 = data[pos++] & 0xFF;
if ((char2 & 0xC0) != 0x80)
throw new RuntimeException("Class Format Error (utf)");
str[ strlen++] = (char) (((c & 0x1F) << 6) | (char2 & 0x3F));
break;
case 14:
// 1110 xxxx 10xx xxxx 10xx xxxx
count += 3;
if (count > utflen)
throw new RuntimeException("Class Format Error (utf)");
char2 = data[pos++] & 0xFF;
char3 = data[pos++] & 0xFF;
if (((char2 & 0xC0) != 0x80) || ((char3 & 0xC0) != 0x80))
throw new RuntimeException("Class Format Error (utf)");
str[ strlen++] = (char) (((c & 0x0F) << 12)
| ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0));
break;
default:
// 10xx xxxx, 1111 xxxx
throw new RuntimeException("Class Format Error (utf)");
}
}
return new String(str, 0, strlen).intern().toCharArray();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?