Używam Java do zapisu tablicy bajtów do pliku. Kiedy otwieram plik w edytorze szesnastkowym, nie zawsze widzę bajty, które spodziewałem się tam znaleźć. Oto mój przykładowy kod i zawartość pliku wyjściowego:Zapisywanie tablicy bajtów do pliku. Nie zawsze uzyskuję oczekiwany wynik
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();
}
}
Gdy otwieram plik w edytorze hex mam 00 9e f3 04
jak zawartość zamiast bajtów, które wysłałem. Moje wyniki wydają się być niekonsekwentne. Czasami uzyskuję oczekiwany rezultat, a czasami nie.
Będzie to wyjście prawidłowe dane:
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 });
zawartość plików są:
14 00 1f 50 e0 4f d0 20 ea 3a 69 10 a2 d8 08 00 2b
Jeśli dodać jeszcze jeden bajt do tej tablicy to się nie powiedzie.
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 });
zawartość plików są teraz:
14 e5 80 9f e4 bf a0 e2 83 90 e3 ab aa e1 81 a9 ed a2 a2 08 e3 80 ab
Miałem też problem z tym jednym:
outStream.write(new byte[] { 0x4C, 0x00, 0x00, 0x00 });
zawartość plików:
4c 00
Dwa ostatnie bajty nie zostały zapisane.
outStream.write(new byte[] { 0x4C, 0x00, 0x00, 0x00, 0x01 });
To przyniesie oczekiwanego rezultatu. Zawartość pliku:
4c 00 00 00 01
Czuję, że brakuje mi czegoś podstawowego w sposobie zapisywania danych w plikach. Jak uzyskać spójne wyniki przy zapisywaniu tablic bajtowych do pliku?
Chociaż nie wierzę, że to coś zmieni, spróbuj '.flush()' następnie '.close()' po '.write()' ... – fge
To jest * bardzo * dziwne. I to jest dokładny kod, który wykonujesz? Nigdzie nie ma "pisarza"? Lub wartości 'String'? Ponadto: wywołanie 'createNewFile()' nie powinno być konieczne. –