JPG In String umwandeln und wieder als JPG speichern

Darth Sitthiander

Grünschnabel
Moin,
ich suche jetzt bereits mehrere Stunden nach einer Lösung, aber ich habe zu wenig Ahnung von dem Zeugs und wäre froh, wenn mir jemand hier aushelfen könnte.

Zu meinem Problem: Ich schreibe im Moment einen MP3 Player mit JavaZoom und möchte alle ID3-Tags auslesen (funktioniert soweit auch super, nur habe ich ein Problem mit dem Albumcover). Die MP3 lese ich in ein byte Array welches kurz darauf ein einen String gespeichert wird.
Wenn ich jetzt das Cover aus dem ID3 Tag nehme und es in ein JPG speichere, ist es fehlerheft. Genauer gesagt werden alle Unicode-Zeichen die dem Latin-1 angehören in \u003f umgewandelt, wodurch das Bild halt ziemlich beschädigt aussieht.

Hier mein Code:
Java:
RandomAccessFile ranFile2 = new RandomAccessFile("23.jpg","r");
byte[] bytearr2 = new byte[(int) ranFile2.length()];
ranFile2.seek(0);
ranFile2.read(bytearr2,0,(int) ranFile2.length());
String b = new String(bytearr2);
BufferedWriter out = new BufferedWriter(new FileWriter("test.jpg"));
out.write(b);
out.close();
 
Zuletzt bearbeitet:
Hi

gibt es einen Grund, warum du die Daten in einen String stopfst?
Ich halte String nicht gerade ideal für Binärdaten...
Schreib doch einfach das Bytearray wieder raus.

Gruß
 
Mein ganzes Programm baut eben auf String auf, aber wie du sagst ist String womöglich nicht die beste Variante. Hab's jetzt mit FileOutputStream gemacht:
Java:
RandomAccessFile ranFile2 = new RandomAccessFile("23.jpg","r");
byte[] bytearr2 = new byte[(int) ranFile2.length()];
ranFile2.seek(0);
ranFile2.read(bytearr2,0,(int) ranFile2.length());
FileOutputStream fos = new FileOutputStream("test.jpg");
fos.write(bytearr2);
fos.close();
Danke für den Hinweis. Wenn jemand allerdings wüsste, wie ich das Problem mit den Strings umgehen kann (ich benutze überall substrings und habe keine Ahnung wie das mit byteArrays funktioniert), wäre ich froh, mehr darüber zu erfahren. Ist das hier vielleicht ein Lösungsansatz? http://rgagnon.com/javadetails/java-0596.html
 
Zuletzt bearbeitet:
Dau du im Byearray jedes Byte durchnummeriert hast, sehe ich da überhaupt kein Problem:
Java:
public byte[] mein_ba_substr(byte[] daten, int start, int length) throws Exception
{
    byte[] ret=new byte[length];
    for(--lenght;length>=0;length--)
        ret[length]=daten[start+length];
    return ret;
}

Gruß
 
Zurück