Java - Размерът на файла спрямо размера на размера на байтовия масив на InputStream се различава с 4096

Опитвам се да проверя размера на входен поток, който идва първоначално от файл, но извън обхвата на моя код, и го сравнявам с действителен файл на диска, опитвайки се да проверя дали и двата са идентични.

Когато преобразувам входния поток в байтов масив и вземам дължината, резултатът е точно 4096 по-малък от същия файл на диска. Предполагам, че има някакъв хедър, който заема допълнителните 4096 байта.

Може ли някой да потвърди тази теория и да ми каже дали това ВИНАГИ ще е така?

Този въпрос е главно за разликата от 4096 байта и откъде идва, а не толкова за това как да сравнявате файлове. Имам други проверки като md5 и други, за да помогна в тази област.

Благодаря


person Wouter    schedule 01.06.2014    source източник
comment
Не трябва да има разлика в размерите. Но освен ако не ни покажете кода, можем само да гадаем какво се случва. Между другото - твоята теория, че има някакъв хедър, който увеличава размера на файла, е неправилна.   -  person Stephen C    schedule 01.06.2014
comment
Как измервате размера на файла на диска? FS разпределя памет на X байтови парчета - да речем 16k. Ако вашият файл е 1 байт, той пак ще заема 16k на диска. Така че измервате действителния размер на файла или размера, който той заема на диска?   -  person Svetlin Zarev    schedule 01.06.2014
comment
Всъщност използвам Mongo Grid FS и размерът на файла е това, което Grid FS казва. Това е точният размер на данните, а не блоковото съхранение на диска. Ако беше блоковото хранилище, щях да го забележа, като погледнах номера. Размерът на файла, който имам сега, завършва на ...33, така че не е кратно на 1024.   -  person Wouter    schedule 02.06.2014


Отговори (1)


За какво използвате сравнението на размерите? Не можете да сте сигурни, че двата файла са еднакви, без да проверите и съдържанието, следователно вероятно трябва да прочетете съдържанието на вашия файл на вашия диск в паметта, откъдето можете да проверите техните размери.

person Attila Neparáczki    schedule 01.06.2014
comment
Attila - 1) Ако тествате дали два големи файла са равни, тогава първо сравняването на дължините им ще ви каже дали трябва да си правите труда да четете и сравнявате и двата файла. 2) Четенето на два големи файла в паметта, преди да ги сравните, е лоша идея. - person Stephen C; 01.06.2014
comment
Стивън С е прав. Сравнението на размера на файла е само 1 част от сравнението на данните. Също така проверявам тип съдържание/mime и контролни суми MD5. Проверката на размера на файла е само последна проверка, за да сте 100% сигурни. Честно казано, въпросът не е толкова кой да сравнява файловете. Искам да знам откъде идва разликата от 4096 байта. - person Wouter; 01.06.2014