Я использую Java для записи массива байтов в файл. Когда я открываю свой файл в шестнадцатеричном редакторе, я не всегда вижу те байты, которые я ожидал там увидеть. Вот мой пример кода и содержимое выходного файла:
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();
}
}
Когда я открываю файл в шестнадцатеричном редакторе, я получаю 00 9e f3 04
в качестве содержимого вместо байтов, которые я отправил. Мои результаты кажутся противоречивыми. Иногда я получаю ожидаемый результат, а иногда нет.
Это выведет правильные данные:
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 } );
Содержимое файла:
14 00 1f 50 e0 4f d0 20 ea 3a 69 10 a2 d8 08 00 2b
Если я добавлю еще один байт в этот массив, произойдет сбой.
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 } );
Содержимое файла теперь:
14 e5 80 9f e4 bf a0 e2 83 90 e3 ab aa e1 81 a9 ed a2 a2 08 e3 80 ab
У меня тоже были проблемы с этим:
outStream.write( new byte[] { 0x4C, 0x00, 0x00, 0x00 } );
Содержимое файла:
4c 00
Последние два байта не записываются.
outStream.write( new byte[] { 0x4C, 0x00, 0x00, 0x00, 0x01 } );
Это даст ожидаемый результат. Содержимое файла:
4c 00 00 00 01
Я чувствую, что мне не хватает чего-то фундаментального в том, как данные записываются в файлы. Как получить согласованные результаты при записи массивов байтов в файл?
.flush()
, затем.close()
после того, как.write()
... - person fge   schedule 14.06.2013Writer
нигде нет? ИлиString
значений? Также: вызовcreateNewFile()
не должен быть необходим. - person Joachim Sauer   schedule 14.06.2013