2013-09-28 3 views
0

Когда я создаю файл я использую DataOutputStream написать один «Int» в то время:Проблемы чтения данных из двоичного файла или создавать его

Database.write(0) 

Конечно, это не говорит, 0 это переменная существует, но Я напечатал его, а первый - 0, поэтому я беру его в качестве примера.

Теперь я не уверен на 100%, но только с помощью этой строки кода теперь мой файл должен содержать:

0000 0000 0000 0000 0000 0000 0000 0000 

правильно?

Так что, когда я пытаюсь прочитать самые первые 4 байта с помощью:

RandomAccessFile raf = new RandomAccessFile("Database", "r"); 
raf.seek(0); 

byte[] ByteArr = new byte[4]; 
raf.read(ByteArr, 0, ByteArr.length); 

ByteArr должен содержать только 0-х?

Ну я напечатал Byte [], и это то, что я получаю:

0 
4 
13 
-126 

Kind Regards Капитан Confused

ответ

2

write() метод записывает один байт в файл. Его параметр является int, но предполагается, что int находится в диапазоне [0, 255].

Если вы хотите написать полный 4-байтовый int в файл, используйте метод writeInt(). В противном случае, чтобы снова получить только значение 0, прочитайте один байт из файла, используя read().

В качестве примечания, RandomAccessFile может обрабатывать как чтение, так и запись, поэтому вы должны использовать его для обоих.

+0

Вы были верны! Когда я зависал над write() в eclipse, он сказал, что для переменной int используется переменная, поэтому я неправильно истолковываю ее значение! На боковой ноте я попробую использовать RAF! благодаря –

1

Проблема DataOutputStream.write(int b) фактически записывает наименее значимые байт. Если вы хотите записать 4 байта, вам нужно использовать DataOutputStream.writeInt(int)

0

Вы пишете что-то по-китайски, а затем пытаетесь прочитать его на английском языке, конечно, это не имеет смысла. Если вы хотите написать, используя DataOutputStream, вы должны прочитать с помощью DataInputStream. Как вы видите, необработанное чтение не будет понимать кодировку, которую используют потоки данных. Кроме того, вы можете читать сырые байты, но тогда вам также придется писать их, а не использовать DataOutputStream, который кодирует данные, чтобы DataInputStream мог его декодировать.