Einlesen von Bytestreams

Status
Nicht offen für weitere Antworten.

muca

Mitglied
Hallo,

ich bin ganz neu hier im Forum. Ich brauche sehr dringend Hilfe um ein Java-Code zu verstehen. Ich bin Anfänger in Java oder überhaupt in Programmieren. Vielleicht ist ja meine Frage lächerlich aber wie gesagt bin Anfänger und kann nicht so gut verstehen.:noe:

Mein Problem ist folgendes : Ich möchte selber ein Programm schreiben, dass die Bilder im BMP-Format einliest und ausliest. Da ich selber keine Ahnung habe, wie das geht, habe ich mich entschieden, einpaar fertige Code mir anzusehen , um eine Idee zu haben, wie ein Bild eingelesen wird.

Ich habe ein Code gefunden, in dem Funktionen zum Einlesen geschrieben sind.
Das Code sieht so aus :

Java:
import java.io.*;


public class PCBinaryInputStream {

    DataInputStream file;

    public PCBinaryInputStream(File f) throws IOException
    {
        file = new DataInputStream(new BufferedInputStream(new FileInputStream(f)));
    }
    
    public int readInt() throws IOException
    {
        int i=file.readInt();
        return ((i<<24)|((i&0x0000FF00)<<8)|((i&0x00FF0000)>>>8)|(i>>>24));
    }

    public short readShort() throws IOException
    {
        int i=file.readUnsignedShort();
        return (short)((i<<8)|(i>>>8));
    }

    public byte readByte() throws IOException
    {
        return (byte)file.readUnsignedByte();
    }

    public void readByteArray(byte b[]) throws IOException
    {
        file.readFully(b);
    }

    public void skip(long nbytes) throws IOException
    {
        file.skip(nbytes);
    }

    public void close() throws IOException
    {
        file.close();
        file=null;
    }

    public void finalize() {
        if (file != null) {
            try {
                close();
            } catch (IOException e) {}
        }
    }
}

Ich verstehe die folgenden Zeilen nicht.

return ((i<<24)|((i&0x0000FF00)<<8)|((i&0x00FF0000)>>>8)|(i>>>24));

return (short)((i<<8)|(i>>>8));

Ich verstehe nicht, wofür 24 steht oder 8 oder 0x0000FF00 oder 0x00FF0000...

Könnte mir jemand vielleicht erklären, was diese Zahlen bedeuten?

Für Hilfe wäre ich sehr dankbar.
🙂
 
Das sind Hexadezimale Zahlen und bei den Operatoren handelt es sich um Bit-Shifting.

Hallo ,

vielen Dank für die Antwort. ich weiß, dass es hier um Bit-Shifting geht. Aber von Bits habe ich auch sehr wenig Ahnung. Ich kann den Zusammenhang zwischen Bit-Shifting und Einlesen von BMP nicht nachvollziehen. könnte mir vielleicht jemand genaue erklären, was die beiden Zeilen bedeuten und was für einen Sinn sie im Zusammenhang von Einlesen von BMPs besitzen? Ich wäre für jede Hilfe wirklich sehr dankbar. Ohne das zu verstehen, kann ich nicht weiter kommen.;(
 
Der Code dreht offenbar die Byte Reihenfolge um, was soll das mit BMP zu tun haben?

ich weiß auch nicht, was das mit BMP zu tun hat. Wir ich schon gesagt habe, der Code ist hauptsächlich für Einlesen von Bildern in BMP-Format geschrieben. Ich möchte das sehr gerne verstehen, aber kann nicht verstehen.

Könnt ihr mir vielleicht eine Quelle vorschlagen, wo ich darüber nachlesen kann? Ich suche die ganze Zeit im Internet nach einer guten Quelle über Einlesen von Bytestreams oder über Einlesen von Bildern in BMP-Format in Java. Aber bis jetzt konnte ich nichts ausführliches finden. ;(
 
Ich würde mir mal das Dateiformat von BMP ansehen. Daraus solltest du dann schlauer werden. Und nicht die ganze Zeit rumheulen :bae:
 
Also du möchtest eine BMP-Datei einlesen... und was möchtest du dann mit ihr machen? Willst du sie kopieren oder was anderes?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben