void createJarWithLargeFile(File jarFile, long minlength) throws IOException {
File javaFile = new File("Foo.java");
Manifest manifest = createMainClass(javaFile);
File classFile = getClassFile(javaFile); try (JarOutputStream jos = new JarOutputStream(new FileOutputStream(jarFile), manifest);
BufferedOutputStream bos = new BufferedOutputStream(jos);
FileInputStream fis = new FileInputStream(classFile);) {
jos.setLevel(ZipOutputStream.STORED);
jos.setMethod(0);
JarEntry je = new JarEntry("large.data");
je.setCompressedSize(getCount(minlength) * BUFFER_LEN);
je.setSize(getCount(minlength) * BUFFER_LEN);
je.setCrc(computeCRC(minlength));
je.setMethod(ZipEntry.STORED);
jos.putNextEntry(je);
createLargeFile(bos, minlength);
je = new JarEntry(classFile.getName());
je.setCompressedSize(classFile.length());
je.setSize(classFile.length());
je.setCrc(computeCRC(classFile));
je.setMethod(ZipEntry.STORED);
jos.putNextEntry(je);
copyStream(fis, bos);
bos.flush();
jos.closeEntry();
}
}
void createLargeJar(File jarFile, String comment) throws IOException { finalint MAX = Short.MAX_VALUE * 2 + 10;
JarEntry je = null;
File javaFile = new File("Foo.java");
File classFile = getClassFile(javaFile);
Manifest manifest = createMainClass(javaFile); try (JarOutputStream jos = new JarOutputStream(new FileOutputStream(jarFile), manifest);
FileInputStream fis = new FileInputStream(classFile)) {
jos.setLevel(JarOutputStream.STORED);
jos.setMethod(JarOutputStream.STORED); for (int i = 0; i < MAX; i++) {
je = new JarEntry("X" + i + ".txt");
je.setSize(0);
je.setCompressedSize(0);
je.setCrc(0);
jos.putNextEntry(je);
}
// add a class file
je = new JarEntry(classFile.getName());
je.setCompressedSize(classFile.length());
je.setSize(classFile.length());
je.setCrc(computeCRC(classFile));
jos.putNextEntry(je);
copyStream(fis, jos);
jos.closeEntry(); if (comment != null) {
jos.setComment(comment);
}
}
}
// a jar with entries exceeding 64k + a class file for the existential test
@Test void testScenarioA() throws Exception {
File largeJar = new File("large.jar");
createLargeJar(largeJar, null);
testTheJar(largeJar);
}
// a jar with entries exceeding 64k and zip comment
@Test void testScenarioA1() throws Exception {
File largeJar = new File("largewithcomment.jar");
createLargeJar(largeJar, "A really large jar with a comment");
testTheJar(largeJar);
}
// a jar with an enormous file + a class file for the existential test
@Test void testScenarioB() throws Exception { final String testString = "BigJar_testScenarioB"; if (Boolean.getBoolean(testString) == false &&
System.getenv(testString) == null) {
System.out.println("Warning: testScenarioB passes vacuously"); return;
} final File largeJar = new File("huge.jar");
final Path path = largeJar.getAbsoluteFile().getParentFile().toPath(); finallong available = Files.getFileStore(path).getUsableSpace(); finallong MAX_VALUE = 0xFFFF_FFFFL;
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.