![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
(GET) Как более эффективно "избавиться от заголовка" полученнного
zap8 © (2007-02-20 07:16:00)При получении от сервера запрошенного файла (метод GET) помимо тела самого файла в начале передается заголовок.
Как более эффективно «избавиться» от заголовка.
Можно конечно считывая(Socket.ReceiveBuf) вначале по 1 байту дойти до конца заголовка(#13#10#13#10) и с этого места начать копирование в файл. Можно по окончании загрузки что называется «вырезать» массив байт файла, начиная с конца заголовка и до конца файла. Но как-то все это не эффективно.
p.s. для приема байт данных использую именно функцию Socket.ReceiveBuf(Buff,SizeOf(Buff))
Посоветуйте как лучше сделать.
zap8 (2007-02-27 09:08:00) [1]DVM © (26.02.07 17:38) [6]
Так и сделал. Спасибо.
DVM (2007-02-26 17:38:00) [2]
> Посоветуйте как лучше сделать.
Читать ответ порциями (неважно по сколько байт) в буфер. После приема очередной порции делать проверку на #13#10#13#10. Если разделитель найден - отсекаем начало буфера, включая разделитель и продолжаем читать уже без проверки на разделитель.
Сергей М. (2007-02-20 09:23:00) [3]
> SlymRO (20.02.07 09:12) [4]
> а как же readln? канечно там 128 байт кеша
128 <> 1
> читает то _ReadChar
Заметь - из кэшачитает.
SlymRO (2007-02-20 09:12:00) [4]Сергей М. © (20.02.07 8:58) [2]
по одному байту за один вызов ReceiveBuf действительно не эффективно
Апеллирую
а как же readln? канечно там 128 байт кеша, но читает то _ReadChar! или тот же pos: сначала REPNE SCASB! (поиск байта) а уж потом REPE CMPSB (кстати тоже по байту)
zap8 (2007-02-20 09:10:00) [5]>и ничего более "эффективного" чем по "1 байту" не придумали
Придумал! Считывать по 1гВ
Сергей М. (2007-02-20 08:58:00) [6]
> zap8 (20.02.07 07:16)
см. SlymRO (20.02.07 08:51) [1]
Только вот считывать по одному байту за один вызов ReceiveBuf действительно не эффективно.
Считывай в буфер за один вызов блоки размером кратным 4к и анализируй, нет ли среди считанных в буфер данных последовательности #13#10#13#10 (естественно, с учетом анализа предыдущего считанного буфера)
SlymRO (2007-02-20 08:51:00) [7]zap8 (20.02.07 7:16)
"заголовка" для лохов придумана... а крутые перцы от них эффективно избавляются...
конец заголовка - пустая строка или в твоей интерпритации последовательность байтов #13#10#13#10
и ничего более "эффективного" чем по "1 байту" не придумали