Hi frquadrat,
Ich habe ein ähnliches Problem: Ich muss eine Date auslesen und in einem String speichern. Dann soll der String weiter gegeben und bearbeitet werden. Am Ende soll aus dem String wieder ein Byte Array erstellt werden und wieder in eine Datei geschrieben werden.
Weil ich der ganzen Sache nicht so traue bevor ich dann den String weiterreiche, habe ich mir ein kleines Testprog geschrieben, daß im Prinzip nichts anderes macht als:
-Datei in einem Byte[] speichern
-den Byte[] dann mit toString in einen String umwandelt
-dann den String wieder in ein Byte[] wandelt
-beide byte[] vergleicht
-den aus dem String generierten byte[] dann weider in eine andere Datei schreibt
Ergebnisse dieses progs:
-Die Länge der beiden Byte[] ist schon mal anders wenn ich "utf-8" benutze
-Außerdem sind sowohl bei der Benutzung von "utf-8" als auch ohne, die Beldung der Arrays anders
-Wenn ich UTF-8 weglasse, dann ist die Länge und der größte Teil der Belegungen der Arrays identisch.
Problem:
- Auch wenn ich utf-8 weg lasse, dann ist die entsande Kopie der Datei nicht identisch
Warum String:
-Ich bin auf Grund der Rahmenbedingunen meines Projekts auf den String angewiesen, um die Datei in StringForm weiter verarbeiten zu können
Jetzt der java code:
String content = "";
String filename = "C:\\pdf1.pdf";
//Datei in byte data[] einlesen
File file = new File(filename);
FileInputStream fileInputStream = new FileInputStream(file);
byte[] data = new byte[(int) file.length()];
fileInputStream.read(data);
fileInputStream.close();
//byte data[] als String in String content speichern
content = new String(data,"utf-8");
//String content wieder in ein byte[] konvertieren
byte[] a = content.getBytes("utf-8");
//beide byte[] vergleichen
System.out.println(data.length);
System.out.println(a.length);
for (int i = 0; i < data.length; i++){
if(data[i]!= a[i]) {
System.out.println( i +"--" + data[i] + "---" + a[i]);
}
}
//und noch zum Praxistest in eine Datei schreiben
FileOutputStream f = new FileOutputStream(new File("C:\\lala.pdf"));
f.write(a);
f.close();
Ziel:
Ich will es schaffen eine z.B. pdf-datei auszulesen, diese dann in einen String zu wandeln und dann den weg zurück wieder zu schaffen um am ende erstmal eine identische Kopie der ausgangsdatei zu haben. Wenn ich UTF-8 weglasse sind die beiden Dateien zwar gleich groß, aber eben nicht identisch, so daß die kopierte PDF nicht richtig angezeigt wird, wenn man diese öffnet
Wichtig:
Es geht mir nicht darum irgendwie eine Kopie zu erstellen, die ich dann öffnen kann, sondern der Transfer von byte[] ind String und dann wieder in byte[] muss klappen.
Frage:
Was mache ich falsch?