Hallo Leute,
ich finde meinen Fehler nicht
Ich möchte ein byte[] in eine Datei schreiben und es anschließend wieder daraus lesen. Beim Lesen entsteht aber plötzlich ein anderes byte[] als ich geschrieben habe.
Hier ein vereinfachtes Beispiel, wo der selbe Fehler auftritt. Würde alles richtig arbeiten, würden die Ausgaben die selben sein, was aber nicht der Fall ist.
Um den Hashwert zu berechnen könnt ihr auch einen anderen Weg nutzen, ich bin hier über die bouncycastle Bibliothek gegangen.
Findet jemand meinen Fehler, oder liegt der Fehler in Java selbst?
Danke schon mal für die Unterstützung!
Grüße
Ph3n1x
ich finde meinen Fehler nicht
Ich möchte ein byte[] in eine Datei schreiben und es anschließend wieder daraus lesen. Beim Lesen entsteht aber plötzlich ein anderes byte[] als ich geschrieben habe.
Hier ein vereinfachtes Beispiel, wo der selbe Fehler auftritt. Würde alles richtig arbeiten, würden die Ausgaben die selben sein, was aber nicht der Fall ist.
Um den Hashwert zu berechnen könnt ihr auch einen anderen Weg nutzen, ich bin hier über die bouncycastle Bibliothek gegangen.
Java:
import java.io.*;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.security.MessageDigest;
import org.bouncycastle.util.encoders.Hex;
/**
*
* @author Marcel Carlé <mc@marcel-carle.de>
*/
public class Tester {
public static void main(String[] args) throws Exception {
byte[] data = openFile();
// Erstelle Datei zum schreiben
FileOutputStream fos = new FileOutputStream(new File("test"));
ObjectOutputStream oosf = new ObjectOutputStream(fos);
// Schreibe byte[]-Länge und anschließend das Array selbst
oosf.writeInt(data.length);
oosf.write(data);
// Speichere Datei
fos.flush();
fos.close();
// Gebe den Hashwert des byte[]-Arrays aus
try {
final MessageDigest messageDigest = MessageDigest.getInstance("SHA-512");
messageDigest.reset();
System.out.println(new String(Hex.encode(messageDigest.digest(data))));
} catch (Exception e) {
}
// Öffne die gerade geschriebende Datei
FileInputStream fis = new FileInputStream(new File("test"));
ObjectInputStream ois = new ObjectInputStream(fis);
// Lese zunächst die Länge des kommenden byte[]
int length = ois.readInt();
byte[] dataRead = new byte[length];
// ... und anschließend das byte[]
ois.read(dataRead);
// Gebe den Hashwert des byte[]-Arrays aus
try {
final MessageDigest messageDigest = MessageDigest.getInstance("SHA-512");
messageDigest.reset();
System.out.println(new String(Hex.encode(messageDigest.digest(dataRead))));
} catch (Exception e) {
}
}
private static byte[] openFile() throws Exception {
// Lade Datei herunter
URL website = new URL("http://www.marcel-carle.de/assets/Cryptonify/Cryptonify-1.7.8.zip");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos2 = new FileOutputStream("tmp");
fos2.getChannel().transferFrom(rbc, 0, 1 << 24);
fos2.flush();
fos2.close();
// Öffne heruntergeladene Datei
File selectedFile = new File("tmp");
FileInputStream fis1 = new FileInputStream(selectedFile);
byte[] data = new byte[(int) selectedFile.length()];
fis1.read(data);
fis1.close();
// Gebe byte[] der heruntergeladenen Datei zurück
return data;
}
}
Findet jemand meinen Fehler, oder liegt der Fehler in Java selbst?
Danke schon mal für die Unterstützung!
Grüße
Ph3n1x