powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Оптимизация побайтового чтения и сравнения двух бинарных файлов
25 сообщений из 112, страница 3 из 5
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575369
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

Дока изначально была на русском, а потом переводилась на инглиш. Исходника уже не найти. Можно переводить доки в гугле, можно смотреть демки, можно писать на форум: http://www.sql.ru/forum/1178076-a/oficialnyy-reliz-cachedbuffers
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575375
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

А есть претензия ко мне лично или к моему коду?
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575381
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRockЕсли б ты еще вычитывал и сравнивал не побайтно, а там, по 16к, боюсь представить даже, как бы ты на такую скорость отреагировал. И без кэшедбуферз.
Но, может, так надо, я не вдавался.
Оно и правда там нужно анализировать каждый байт, поэтому по 16К никак не получится!..(

В самом первом посте данного топика я попытался расписать суть настоящей процедуры, а не тестовой, и код там же имеется!
Правда в ней вроде есть одна алгоритмическая ошибка (как я уже исправил ее на сегодняшний момент) и возможно - неточности с анализом выхода за пределы файлов.
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575388
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

Самое прикольное, что 2,5 секунды - не предел
ReadData - это высокоуровневая функция. Если научиться работать на низком уровне - можно читать данные напрямую, сейчас кешируется 64Кб. Но это сложно, по крайней мере для твоего уровня, поэтому рекомендую не заморачиваться :)
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575395
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOUBellic,

Дока изначально была на русском, а потом переводилась на инглиш. Исходника уже не найти. Можно переводить доки в гугле, можно смотреть демки, можно писать на форум: http://www.sql.ru/forum/1178076-a/oficialnyy-reliz-cachedbuffers
SOFT FOR YOU , ну а тут можно еще спросить?
Просто чтоб полностью переправить Реальную мою процедуру - нужно еще заменить на Ваши аналоги вот это:
Код: pascal
1.
FilesPos := FOriginal.Position; // FOriginal: TFileStream;

и в обратку:
Код: pascal
1.
FOriginal.Position := FilesPos;


Ну еще раз уточнюсь:
Код: pascal
1.
FROriginal.ReadData(ISimvol);

Автоматически передвигает позицию на следующий байт, как ReadBuffer в TFileStream ?
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575414
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

ReadData сдвигает позицию, да
Позицию в ридере ты так же можешь узнать через свойство Position

Но вот привычного Seek и SetPosition не предусмотрено. Если ты прочитал данные - вернуться назад ты не сможешь. Ты можешь пропустить несколько байт спереди через функцию Skip. Ты можешь прочитать произвольный кусок с помощью функции DirectRead. Например, ты знаешь, что по такому-то смещению есть строка столько то байт. Тогда можешь вызывать DirectRead. Но в общем случае она не быстрее обычного чтения из файла, разве что если этот кусок уже закеширован внутри буфера. И DirectRead не меняет текущую позицию ридера.
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575434
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOUBellic,

ReadData сдвигает позицию, да
Позицию в ридере ты так же можешь узнать через свойство Position

Но вот привычного Seek и SetPosition не предусмотрено. Если ты прочитал данные - вернуться назад ты не сможешь. Ты можешь пропустить несколько байт спереди через функцию Skip. Ты можешь прочитать произвольный кусок с помощью функции DirectRead. Например, ты знаешь, что по такому-то смещению есть строка столько то байт. Тогда можешь вызывать DirectRead. Но в общем случае она не быстрее обычного чтения из файла, разве что если этот кусок уже закеширован внутри буфера. И DirectRead не меняет текущую позицию ридера.
В общем то у меня в Реальной процедуре идет побайтное последовательное чтение и сравнение, но лишь до определенного момента, когда сработает одна из проверок.
В этом месте Основная позиция запоминается и начинается чтение и анализ по другому адресу.
После чего может произойти дальнейшее чтение с запомненной Осн.позиции, или же она продвигается вперед на определенное число байт.
Вот такое описание надеюсь понятно?

Не совсем понял - Позицию я установить могу через "свойство Position",
а встать на запомненную ранее - никак???
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575472
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

авторАнглийский язык иногда бывает несколько суховат и не передает некоторые нюансы русскоязычного варианта! Не правда ли?..)))

Если текст писали с хорошим знанием языка, то всё там будет отлично. Ну а на уровне гугло-перевода документации, конечно, будет сухой :)

авторОно и правда там нужно анализировать каждый байт, поэтому по 16К никак не получится.

Что мешает сделать простейший буфер в памяти на 8-16 кб, видимо, так и останется для нас загадкой :)
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575475
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10 мб можно запросто вычитать целиком в память и там разбираться. Зачем все эти сложности? Ладно был бы хотя бы гиг. И то.
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575482
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
господа, ну реально же - 5 строк кода :) ну нафига это всё? вторая неделя разработки! это же ад какой-то :)
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575488
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaon10 мб можно запросто вычитать целиком в память и там разбираться. Зачем все эти сложности? Ладно был бы хотя бы гиг. И то.
Да вот же - хотел с Memory озадачиться, да SOFT FOR YOU начал обижаться на якобы игнор его библиотек..)))
Пощупал, понравилось! - Вот жду уточнения на свои вопросы!

Следующий вариант обязательно будет с Memory !..)))
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575496
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaonгоспода, ну реально же - 5 строк кода :) ну нафига это всё? вторая неделя разработки! это же ад какой-то :)
makhaon , пардон конечно, ...
1 . 5 строк кода - это в Тестовом единственном цикле - ради сравнения!!!
2 . да и никто тут силком никого не держит в этом топике!..)))
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575508
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну не разработчик я!!!..)))
Дэлфи - это мой помощник в моем хобби - локализации японских ( JDM ) магнитол!
Основное время днем - вожу чужих деток в школу, садик, по спорт-комплексам и обратно...
На Дэлфи и JDM наскакиваю урывками, посему порой и некоторая моя "задумчивость" в ответах и решениях!,,))
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575521
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

Прочитать Position можно, установить Position - нельзя
Эта либа предназначается для работы с гигабайтами данных. Ну или хотя бы сотнями мегабайт. А если файлы по 10 метров - конечно, читай их в буфер и обрабатывай целиком
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575546
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BellicСледующий вариант обязательно будет с Memory !..)))
В своём первом варианте замени файловые стримы на TMemoryStream; Например, так:
Код: pascal
1.
2.
3.
4.
5.
6.
var FOriginal : TMemoryStream;
//
//FOriginal:=TFileStream.Create(FullOriginalFileName, fmOpenRead, fmshareCompat);
//
FOriginal := TMemoryStream.Create;
FOriginal.LoadFromFile(FullOriginalFileName);


...и всё остальное оставь без изменений (будет работать и Seek и Position).
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575563
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOUBellic,

Прочитать Position можно, установить Position - нельзя
Эта либа предназначается для работы с гигабайтами данных. Ну или хотя бы сотнями мегабайт. А если файлы по 10 метров - конечно, читай их в буфер и обрабатывай целиком
Гигов пока не предвидится...))
Сегодня 10 Метров, а завтра может быть уже и поболее! - Всегда удобно иметь под рукой подходящие и проверенные инструменты!))
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575570
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey, спасибо!
Я уже на "колесах"...)))
Мемори уже касался чуток вот тут:
http://www.sql.ru/forum/1276254/poisk-i-zamena-posledovatelnosti-bayt-v-binarnom-fayle
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575580
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Да пусть работает с TBytes
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575590
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOUДа пусть работает с TBytes
Мне тоже хотелось бы с ним поэксперементировать, но я еще ни разу с ним не работал!
Это типа файлы в байт-массиве?
Пока к ночи до компа доберусь - можно чуток кода, для затравки?..)))
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575592
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BellicМемори уже касался чуток вот тут
Я вижу, лёгких путей ты не ищешь :)
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575596
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Kazantsev Alexey]BellicЯ вижу, лёгких путей ты не ищешь :)
Дык легкий путь (ФайлСтрим) в той процедуре вообще 24 часа работал!..)))))
Мемори - решил проблему!
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575632
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUА есть претензия ко мне лично или к моему коду?
помилуй, какие претензии?

мы с тобой в разных полях пасемся :)
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575655
SoftForYou
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bellic,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function LoadFileData(const FileName: string): TBytes;
var
  F: TFileStream;
  Len: Integer;
begin
  F := TFileStream.Create(FileName, fmRead);
  try
    Len := F.Size;
    SetLength(Result, Len);
    F.ReadBuffer(Pointer(Result)^, Len);
  finally
    F.Free;
  end;
end;
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575675
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читай всё в память!!! Ну правда, так быстрее всего.

Одно решение уже кинули.

Еще:

Код: pascal
1.
Bytes := TFile.ReadAllBytes('1.bin');



У тебя будет массив байт, с которым может сделать что угодно и как угодно :)
...
Рейтинг: 0 / 0
Оптимизация побайтового чтения и сравнения двух бинарных файлов
    #39575678
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭто типа файлы в байт-массиве?

Это массив байт. Кусок памяти, который отображен как n подряд идущих байт. Доступ - как к любому обычному массиву по индексу: arr[i]. И на запись и на чтение. Проще, в общем, некуда :)
...
Рейтинг: 0 / 0
25 сообщений из 112, страница 3 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Оптимизация побайтового чтения и сравнения двух бинарных файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]