Bytes zu String, String zu Bytes

Leonhead

Mitglied
Hallo,
ich habe eine Problem ein Byte-Array zu einem String zu machen und wieder zurück.
Die Byte-Arrays sind dann zwar gleich lang aber der Inhalt stimmt nicht mehr.
Ich habe auch versucht bei dem new String und getBytes den charset auf "utf-8" zusetzen aber dann stimmt nicht einmal mehr die Länge der Byte-Arrays.

Java:
// bild in String
		BufferedImage imageReader = ImageIO.read(bild);
		
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		ImageIO.write(imageReader, "jpg", out);
		
		byte[] data = out.toByteArray();
		
		//Hier ist der String
		String strData = new String(data);
		
		//String in bild
		byte[] neuData=strData.getBytes();
		System.out.println(data.length + " " + neuData.length+" "+data.equals(neuData));//gibt false aus
 
Versuche mal folgendes in Zeile 8 einzufügen:

Java:
byte[] unsigned = data;
data = new byte[unsigned.length];
for(int i = 0, size = data.lenght; i < size; i++)
	data[i] = (byte)(unsigned[i] & 0xFF);
 
Einen byte[]-Array als String zu speichern führt praktisch immer zu solchen Encoding-Problemen (insbesondere wenn der Array beliebige Daten (und eben nicht nur "printable ASCII-characters") enthält.

Kurz: Das macht man nicht! Mach' es anders.
 
mal so am rande ne GANZ DUMME frage : WARUM zur hölle willst du n byte-array in einen string umwandeln ?=!
und WENN ... dann mach es mit Base64 oder nem Hex-String *bitte google selbst wie man ein byte-array in einen hex-string und umgekehrt umwandelt*

aber wie bereits erwähnt : in der regel macht man so einen blödsinn nicht wegen encoding-problemen ...
 
So funktioniert es jetzt:
Java:
// bild in String
		BufferedImage imageReader = ImageIO.read(bild);
		
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		ImageIO.write(imageReader, "jpg", out);
		
		byte[] data = out.toByteArray();
		
		//Hier ist der String
		String strData = new BASE64Encoder().encode( data ); 
		
		//String in bild
		byte[] neuData = new BASE64Decoder().decodeBuffer( strData );
		
		java.awt.Toolkit t = java.awt.Toolkit.getDefaultToolkit();
		Image img = t.createImage(neuData);
		g.setImage(img);
 
Wenn hier jemand eine Frage stellt, will er i.a. nicht, dass die Frage hinterfragt wird, aber...: Das macht so nicht viel (bis gar keinen) Sinn. Sofern du nicht GANZ genau weißt, was du da tust (und warum) nochmal der Tipp: Lass' es...
 
Ach, AmunRa, sei doch nicht so schwer von Begriff :noe: Er will es natürlich in einen String umwandeln, weil er das Bild als String haben will. So schwer ist es doch nicht :noe:

( :joke: )
 

Zurück
Oben