M
Marco01_809
Gast
Hallo Java-Forum,
ich bin noch recht neu in Java, hab vorher in PHP programmiert und da sich ja alle modernen Sprachen ein wenig ähneln wurde mir der "Umstieg" erleichtert. Mache z.Z. einen Java Video Kurs.
Das hat nun alles wenig mit meinem Problem zu tun, also das hier ist mein Code:
Ich programmiere in Eclipse Helios und habe eben nur das "Default Package" benutzt.
Jetzt mal abgesehen davon das der Code wahrscheinlich sehr schlecht ist und zudem auch noch seehr langsam...
Dieser Code braucht 3 Argumente. Diese repräsentieren Breite (x), Höhe (y) und Länge (z).
Nun soll das Programm eine "Welt" generieren. Das wird folgendermaßen gemacht:
Zuerst wird in "map" gepeichert: "x:<x>;y:<y>;z:<z>;". Das ist die Größenangabe der "Welt".
Danach werden die "Blöcke" der Welt generiert. Dazu hab ich mir eine Prozentanzeige gecodet (da ich ein sehr ungeduldiger Mensch bin und wenigstens wissen muss wieweit ich immerhin schon bin).
Die Blöcke werden folgendermaßen gespeichert: "x:y:z:block;" <block> steht für eine Block-Id (von 0 bis 49). Was diese Blöcke sind ist ja egal, ist ja sowieso nur Random.
Dann wird das ganze GZIP-komprimiert in "test.map.txt.gz" geschrieben. Das funktioniert alles ohne Fehler.
Aber will ich nun die GZ-Datei entpacken (nicht in Java, mit z.B. 7-Zip), dann bleibt er bei 78% (immer genau da) stehen und sagt die Datei wäre fehlerhaft. Die 78% die er schon entpack hat sind vollkommen korrekt und entsprechen meiner gedachten Syntax. Wenn ich das ganze ohne GZIP-Komprimierung speichere, funktioniert es natürlich. Aber 400 KB für 32768 Blöcke
D) sind mir zu viel. Mit GZIP ist die Datei nur noch 100 KB groß. Außerdem zeigt mir 7-Zip an, die im *.gz-Pack enthaltene "Test.map.txt" wäre zw. 2 GB und 4.5 GB (variiert immer) groß.
Wieso?
Wäre auch nett wenn ihr mir einige Tipps gibt wie man den Code verbessern kann
Und btw: Das ganze ist nur zur Übung.
Hab eben die *.class, den Source und eine Bat zum starten in einer zip hochgeladen.
ich bin noch recht neu in Java, hab vorher in PHP programmiert und da sich ja alle modernen Sprachen ein wenig ähneln wurde mir der "Umstieg" erleichtert. Mache z.Z. einen Java Video Kurs.
Das hat nun alles wenig mit meinem Problem zu tun, also das hier ist mein Code:
Java:
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
import java.util.zip.GZIPOutputStream;
public class LevelGen {
public static void main(String... args) {
if (args.length < 3) {
System.out.println("Not enough program arguments. Need 3, have "
+ args.length + "!");
System.exit(2);
}
short x = Short.parseShort(args[0]);
short y = Short.parseShort(args[1]);
short z = Short.parseShort(args[2]);
System.out.println("Generating new World; x:" + x + " y:" + y + " z:"
+ z);
long blocks = x * y * z;
System.out.println("Generating " + blocks + " blocks...");
Random rand = new Random();
String map = "x:" + x + ";y:" + y + ";z:" + z + ";";
long generatedBlocks = 0;
int percent = 0;
byte nextPercent = 0;
for (int xi = 0; xi < x; xi++) {
for (int yi = 0; yi < y; yi++) {
for (int zi = 0; zi < z; zi++) {
map += xi + ":" + yi + ":" + zi + ":" + rand.nextInt(49)
+ ";";
generatedBlocks++;
percent = (int)(generatedBlocks / (float)blocks * 100);
if (percent >= nextPercent) {
System.out.println(percent + "% - Generated blocks: " + generatedBlocks);
nextPercent += 5;
}
}
}
}
try {
BufferedOutputStream out = new BufferedOutputStream(
new GZIPOutputStream(new FileOutputStream("test.map.txt.gz")));
char[] map2 = map.toCharArray();
for (int i = 0; i < map2.length; i++) {
out.write(map2[i]);
}
} catch (IOException e) {
System.out.println("Caugth IOException!");
}
System.out.println("Done!");
}
}
Jetzt mal abgesehen davon das der Code wahrscheinlich sehr schlecht ist und zudem auch noch seehr langsam...
Dieser Code braucht 3 Argumente. Diese repräsentieren Breite (x), Höhe (y) und Länge (z).
Nun soll das Programm eine "Welt" generieren. Das wird folgendermaßen gemacht:
Zuerst wird in "map" gepeichert: "x:<x>;y:<y>;z:<z>;". Das ist die Größenangabe der "Welt".
Danach werden die "Blöcke" der Welt generiert. Dazu hab ich mir eine Prozentanzeige gecodet (da ich ein sehr ungeduldiger Mensch bin und wenigstens wissen muss wieweit ich immerhin schon bin).
Die Blöcke werden folgendermaßen gespeichert: "x:y:z:block;" <block> steht für eine Block-Id (von 0 bis 49). Was diese Blöcke sind ist ja egal, ist ja sowieso nur Random.
Dann wird das ganze GZIP-komprimiert in "test.map.txt.gz" geschrieben. Das funktioniert alles ohne Fehler.
Aber will ich nun die GZ-Datei entpacken (nicht in Java, mit z.B. 7-Zip), dann bleibt er bei 78% (immer genau da) stehen und sagt die Datei wäre fehlerhaft. Die 78% die er schon entpack hat sind vollkommen korrekt und entsprechen meiner gedachten Syntax. Wenn ich das ganze ohne GZIP-Komprimierung speichere, funktioniert es natürlich. Aber 400 KB für 32768 Blöcke
Wieso?
Wäre auch nett wenn ihr mir einige Tipps gibt wie man den Code verbessern kann
Und btw: Das ganze ist nur zur Übung.
Hab eben die *.class, den Source und eine Bat zum starten in einer zip hochgeladen.