Integer aus InputStream lesen

Hi!

Ich habe ein J2ME Spiel und dazu mit C++ und SDL dann einen Editor für die Maps geschrieben.
In den Map-Dateien werden vom Editor einfach nacheinander Integer variablen geschrieben.
Folgende Funktion soll dann in dem Spiel eine solche Datei lesen:

Java:
    public static void LoadLevel(int level, String file) throws IOException
    {
        DataInputStream s = new DataInputStream(Levels.class.getResourceAsStream(file));
        int x, y;
        
        level_width[level] = s.readInt();
        level_height[level] = s.readInt();

        System.out.println("Width: " + level_width[level] + " Height: " + level_height[level]);

        level_start_x[level] = s.readInt();
        level_start_y[level] = s.readInt();
        level_goal_x[level] = s.readInt();
        level_goal_y[level] = s.readInt();

        level_ground[level] = new int[level_width[level] * level_height[level]];
        level_lava[level] = new int[level_width[level] * level_height[level]];

        for(x=0; x<level_width[level]; x++)
        {
            for(y=0; y<level_height[level]; y++)
            {
                level_ground[level][x + y * level_width[level]] = s.readInt();
                System.out.println(level_ground[level][x + y * level_width[level]]);
            }
        }
        for(x=0; x<level_width[level]; x++)
        {
            for(y=0; y<level_height[level]; y++)
            {
                level_lava[level][x + y * level_width[level]] = s.readInt();
            }
        }

        s.close();
    }

Allerdings wird aus der Datei leider nur Müll gelesen. Die ersten beiden Werte in der Datei (welche die Breite und Höhe der Map darstellen) sind in der Test-Datei beide 16. Ausgelesen wird aber jeweils 268435456.

Woran könnte das liegen?
 
Kann mit der Interpretation der byte-Reihenfolge zusammen hängen. Die readInt ist so grob implementiert
Java:
public int readInt() throws IOException {
        int ch1 = read();
        int ch2 = read();
        int ch3 = read();
        int ch4 = read();
        if ((ch1 | ch2 | ch3 | ch4) < 0)
            throw new EOFException();
        return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
    }
Kannst mal sowas machen wie
Java:
public int readIntFrom(InputStream in) throws IOException {
        int ch1 = in.read();
        int ch2 = in.read();
        int ch3 = in.read();
        int ch4 = in.read();
        if ((ch1 | ch2 | ch3 | ch4) < 0)
            throw new EOFException();
        return ((ch1 << 0) + (ch2 << 8) + (ch3 << 16) + (ch4 << 24)); // Vertauscht!
    }
 

Zurück
Oben