Ich verwende Java, um ein Byte-Array in eine Datei zu schreiben. Wenn ich meine Datei in einem Hex-Editor öffne, sehe ich nicht immer die Bytes, die ich erwartet habe. Hier ist mein Beispiel-Code und Inhalt der Ausgabedatei:Schreiben von Byte-Array in Datei. Nicht immer erwartet Ergebnis
public static void main(String[] args)
{
File file = new File("c:\\temp\\file.txt");
file.delete();
FileOutputStream outStream = null;
try
{
file.createNewFile();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
try
{
outStream = new FileOutputStream(file);
} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
try
{
outStream.write(new byte[] { 0x14, 0x00, 0x1F, 0x50 });
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Wenn ich die Datei in einem Hex-Editor öffne ich 00 9e f3 04
als Inhalt anstelle des Bytes, die ich geschickt. Meine Ergebnisse scheinen inkonsistent zu sein. Manchmal bekomme ich das erwartete Ergebnis und manchmal nicht.
Dies wird geben die richtigen Daten:
outStream.write(new byte[] { 0x14 , 0x00, 0x1F, 0x50, (byte) 0xE0, 0x4F, (byte) 0xD0, 0x20, (byte) 0xEA, 0x3A, 0x69, 0x10, (byte) 0xA2 , (byte) 0xD8, 0x08, 0x00, 0x2B });
Dateiinhalte sind:
14 00 1f 50 e0 4f d0 20 ea 3a 69 10 a2 d8 08 00 2b
Wenn ich ein weiteres Byte zu diesem Array fügen Sie dann scheitert es.
outStream.write(new byte[] { 0x14 , 0x00, 0x1F, 0x50, (byte) 0xE0, 0x4F, (byte) 0xD0, 0x20, (byte) 0xEA, 0x3A, 0x69, 0x10, (byte) 0xA2 , (byte) 0xD8, 0x08, 0x00, 0x2B, 0x30 });
Dateiinhalt sind jetzt:
14 e5 80 9f e4 bf a0 e2 83 90 e3 ab aa e1 81 a9 ed a2 a2 08 e3 80 ab
Ich hatte auch Probleme mit diesem:
outStream.write(new byte[] { 0x4C, 0x00, 0x00, 0x00 });
Dateiinhalte sind:
4c 00
Die letzten zwei Bytes werden nicht geschrieben.
outStream.write(new byte[] { 0x4C, 0x00, 0x00, 0x00, 0x01 });
Dadurch wird das erwartete Ergebnis. Dateiinhalte sind:
Ich fühle mich wie ich etwas Grundlegendes über die Art und Weise fehlen, wie Daten in Dateien geschrieben werden. Wie können konsistente Ergebnisse beim Schreiben von Byte-Arrays in eine Datei erhalten werden?
Obwohl ich glaube nicht, dass es einen Unterschied machen wird, versuchen Sie '.flush()' dann '.close()' nachdem Sie '.write()' ... – fge
Das ist * sehr * seltsam. Und das ist der genaue Code, den Sie ausführen? Kein 'Writer' irgendwo? Oder 'String'-Werte? Außerdem: Der 'createNewFile()' Aufruf sollte nicht notwendig sein. –