2014-02-19 4 views
1

Я пытаюсь прочитать изображение yuv для Android, представленное в виде файла исходного байта.Python bytearray не так долго, как должно быть

f = open(self.fn) 
self.yuvArray = bytearray(f.read()) 

Я знаю, что файл содержит 720k байт, но self.yuvArray имеет только 350K. Кроме того, попробовав это с несколькими файлами того же формата, все из которых имеют длину 720 Кбайт (проверено как в размере файла, так и в коде C#, возвращает массив размером 720 тыс.), Я заметил, что все они имеют разные размеры, около 350 тыс.

Я попытался выяснить, не удалось ли его какое-то сжатие или что-то не найти. Мне жизненно важно получить правильную длину, независимо от того, все ли там, просто я не вижу ее.

Как я могу прочитать его в массиве размера 720К?

ответ

2

Открыть файл в двоичном режиме (b).

f = open(self.fn, 'rb') 

В противном случае, в Windows, возврат каретки, перевод строки преобразуется, и конкретный байт (26 == 0x1A) причина прочитать возвращение ранее.

with open('testfile', 'wb') as f: 
    f.write('\r\n') 
with open('testfile', 'r') as f: 
    assert f.read() == '\n' # converted 

with open('testfile', 'wb') as f: 
    f.write(''.join(chr(i) for i in range(256))) 
with open('testfile', 'r') as f: 
    assert len(f.read()) < 256 # len(..) == 26 
+0

Отлично! спасибо – Ysch

+0

@YonadavSchleifer, Добро пожаловать в переполнение стека! Если это вам помогло, вы можете рассказать об этом сообществу, [принимая ответ] (http://meta.stackexchange.com/a/5235). – falsetru

Смежные вопросы