Base64 Kodierung liefert korrupte Dateien

Status
Nicht offen für weitere Antworten.

jollyroger

Bekanntes Mitglied
Hi,

zum Transport von Binärfiles über das Netzwerk verwende ich die Base64-Implementierung von apacha, also das paket
org/apache/commons/codec.

Das klappt aber leider nicht....

Folgendes Szenario:

- ich lese und konvertiere eine pdf-Datei mit:


Code:
	public void setAndEncodeSourceFileContent(String sourceFileName) {
		
		BufferedReader bufferedReader = null; 
		StringBuffer fileContent = new StringBuffer();
		String line = null;
		
		try {
			bufferedReader = new BufferedReader(new FileReader(sourceFileName));
			
			while((line = bufferedReader.readLine()) != null) {
				fileContent.append(line);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
		this.sourceFileContent =  new String(
										Base64.encodeBase64(
													fileContent
															.toString()
																.getBytes()));
		
	}


Setze also in einer meiner Klassen das Feld sourceFileContent.

- Nun werden alle Felder dieser Klasse in ein xml-Dokument geschrieben.

Schaue ich mir nun den Inhalt dieses Feldes an, so sehe ich z.b.

Code:
JVBERi0xLjMl5OPP0jEgMCBvYmo8PC9UeXBlL1BhZ2VzL0NvdW50IDQvS2lkc1sgNCAwIFIgMTAgMCBSIDE2IDAgUiAyMiAwI


usw....

- nun versuche den base64-kodierten String wieder zu decoden und das ursprüngliche Dokument wieder hierzustellen mit:

Code:
	public void decodeSourceFileContentAndWrite2File(String path) {

		FileWriter fileWriter = null;
		
		try {
			fileWriter = new FileWriter(path + "\\" + this.sourceFileName, false);
			fileWriter.write(new String(Base64.decodeBase64(sourceFileContent.getBytes())));
			fileWriter.flush();
			fileWriter.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

Nun wird die entsprechende pdf-Datei wieder angelegt, möchte ich sie aber jetzt mit dem acrobat reader öffnen, erhalte ich als Meldung:

Code:
Beim Öffnen dieses Dokuments ist ein Fehler aufgetreten. Diese Datei ist beschädigt und kann nicht repariert werden.

Irgendwas muss da schiefgelaufen sein, nur schaue ich mir meinen Code an, sieht das für mich ganz ok aus.......

Hab ich irgendwas bei der Umwandlung nicht beachtet?

Nachtrag:

Es spielt übrigens keine Rolle, ob ich die Methode decodeBase64 nehme oder einfach nur decode, das Ergebnis ist das Gleiche.
 
R

Roar

Gast
BufferedReader und FileWriter lesen und schreiben text. pdf dateien sind binärdateien. deine daten sind also schon kaputt wenn du sie ausliest.
 

0xdeadbeef

Top Contributor
Eine Binärdatei mit readLine() zu lesen, ist prinzipiell eine schlechte Idee. Überhaupt sollte man auf der Binärseite überhaupt nicht mit String oder char hantieren, sondern nur mit Byte-Arrays. Geeignet für Binärdateien ist FileInputStream.read(byte[] b, int off, int len) bzw. FileOutputStream.write(byte[] b, int off, int len).
Die Mime64 kodierten Dateien kannst DU natürlich wie Textdateien behandeln, aber nicht die Binärdateien - das kann nur zur Murks führen.
 

jollyroger

Bekanntes Mitglied
Danke für den Hinweis,

daran hatte ich absolut nicht gedacht....

Ok,

gibt es eine gute Api für sowas?

Bei sun selber hab ich nichts gefunden und google spuckt auch nur irgendwelchen halbgaren Lösungen aus.......
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Interpreter-Fehler OutOfMemory Exception mit Base64 decode Allgemeine Java-Themen 3
C BASE64 encoding von Binärdaten Allgemeine Java-Themen 4
Airwolf89 Base64 Codierung Allgemeine Java-Themen 7
P MD5 und Base64 Allgemeine Java-Themen 3
M Problem mit Base64 Encoding Allgemeine Java-Themen 2
S BASE64 DECODIERUNG Allgemeine Java-Themen 6
S [Base64] Encoding von String nicht korrekt Allgemeine Java-Themen 5
M Base64 und Steuerzeichen in Java Allgemeine Java-Themen 3
Bluedaishi TEXT Kodierung Allgemeine Java-Themen 3
K Data Konverter - Probleme mit Byte[] Kodierung Allgemeine Java-Themen 3
B Kodierung von String -> URL aufruf Allgemeine Java-Themen 2
U Huffman Kodierung Allgemeine Java-Themen 5
D character kodierung, barcode für barcode font erzeugen Allgemeine Java-Themen 4
S String auf ASCII Kodierung überprüfen? Allgemeine Java-Themen 4
J XML-Datei byteweise einlesen und Kodierung auslesen Allgemeine Java-Themen 4
I Eignung eines Zeichensatzes zur Kodierung eines Unicode-Str. Allgemeine Java-Themen 3
S Unicode-Zeichen erstellen/ Kodierung Allgemeine Java-Themen 4
8u3631984 Argument Captor liefert NULL zurück Allgemeine Java-Themen 2
DiekleineRatte77 Schlüsselworte ANSI Konverter liefert UTF-8 Allgemeine Java-Themen 7
Arif Math.cos liefert komische Werte Allgemeine Java-Themen 8
I HTML einer Website auslesen liefert nur head Allgemeine Java-Themen 6
A Datentypen Long.valueOf liefert kein "L" am Ende Allgemeine Java-Themen 3
T Variablenübergabe liefert immer null Allgemeine Java-Themen 13
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
Q GregorianCalendar Methode add liefert komische Werte Allgemeine Java-Themen 3
T Datentypen ArrayUtils.indexOf( ... ) liefert -1 obwohl Wert scheinbar enthalten ist Allgemeine Java-Themen 15
T SimpleDateFormat.parse() liefert falschen Tag Allgemeine Java-Themen 2
T java.uil.Random liefert negative Werte Allgemeine Java-Themen 2
I newInstance() liefert null zurück Allgemeine Java-Themen 4
Z new Date() liefert falsche Uhrzeit Allgemeine Java-Themen 12
S Newton-Verfahren liefert nur 1 Wert Allgemeine Java-Themen 3
J Liefert new URL(String) gecachte Webseiten? Allgemeine Java-Themen 15
S HashMap containsKey liefert immer false zurück Allgemeine Java-Themen 15
M Kugelschnittberechnung liefert falsche Werte Allgemeine Java-Themen 4
A md5 liefert unterschiedliche Testsummen? Allgemeine Java-Themen 4
S FOP liefert fehlerhafte PDF Allgemeine Java-Themen 13
S instanceof liefert true, aber cast funktioniert nicht! Allgemeine Java-Themen 6
MasterEvil File.createTempFile liefert nur kurzen Pfad mit Tilde Allgemeine Java-Themen 3
M BufferedReader.read(char[] cbuf) liefert falsche Werte? Allgemeine Java-Themen 4
N contains(.) liefert nicht erwartetes Ergebnis Allgemeine Java-Themen 3
H JNI: loadLibrary liefert UnsatisfiedLinkError Allgemeine Java-Themen 2
S ´Locale.getDefault() liefert en Allgemeine Java-Themen 10
C ImageIO die read-Methode liefert mir ein null- Wert zurück Allgemeine Java-Themen 10
S aFile.delete() liefert false - Gründe ? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben