publicstaticbyte[]
loadBufferFromStream(InputStream stream) throws IOException
{ // hack for now, just assume the stream will fit in our reasonable size buffer. // if not, panic int bufferLimit = 200 * 1024; byte[] readBuffer = newbyte[bufferLimit]; int actualSize = stream.read(readBuffer); if ( actualSize >= bufferLimit )
{ // if there might be more bytes, just surrender thrownew IOException("too big for buffer");
}
staticfinal String DEST = System.getProperty("test.classes"); staticfinalboolean VERBOSE = false;
staticboolean checkMatch(byte[] buf, byte[] name, int begIdx) { if (buf.length < name.length + begIdx) { returnfalse;
} for (int i = 0; i < name.length; i++) { if (buf[i + begIdx] != name[i]) { returnfalse;
}
} returntrue;
}
// This function reads a class file from disk and replaces the first character of // the name with the one passed as "replace". Then goes through the bytecodes to // replace all instances of the name of the class with the new name. The // redefinition tests use this to redefine Host$ classes with precompiled class files // Xost.java, Yost.java and Zost.java. staticbyte[]
bytesForHostClass(char replace, String className) throws Throwable {
String tail = className.substring(1);
String origClassName = "" + replace + tail;
File clsfile = new File(DEST + "/" + origClassName + ".class");
if (VERBOSE) {
System.out.println(" Reading bytes from " + clsfile);
} byte[] buf = null; try (FileInputStream str = new FileInputStream(clsfile)) {
buf = loadBufferFromStream(str);
}
boolean found = false; int dollarSignIdx = className.indexOf('$'); int ptrnLen = (dollarSignIdx == -1) ? className.length() : dollarSignIdx; byte[] ptrnBytes = origClassName.substring(0, ptrnLen).getBytes(); byte firstByte = className.getBytes()[0];
for (int i = 0; i < buf.length - ptrnLen; i++) { if (checkMatch(buf, ptrnBytes, i)) { if (VERBOSE) {
System.out.println("Appear to have found " + origClassName + " starting at " + i);
}
buf[i] = firstByte;
found = true;
}
} if (!found) { thrownew Error("Could not locate '" + ptrnBytes + "' name in byte array");
} return buf;
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-10-11)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.