Текущий архив: 2006.04.02;
Скачать: CL | DM;
ВнизНе совсем корректная работа с потоком Найти похожие ветки
← →
beglec © (2006-03-18 18:11) [0]
procedure bebe;
var buf: array of byte;
ReadSize: Integer;
ST: TMemoryStream;
begin
// ReadSize - может быть любым значением
// ST: TMemoryStream; - 100 % создан и в себе имеет информацию разного типа
ReadSize:=980;
SetLength(buf,ReadSize);
St.Read(buf,ReadSize);
end;
Buf постоянно пустой. Почему ?
может я чего нетак делаю. Ошибок не вылетает.
а когда делаю так то все работает
procedure bebe;
var buf: array [1..980] of byte;
ST: TMemoryStream;
begin
// ReadSize - может быть любым значением
// ST: TMemoryStream; - 100 % создан и в себе имеет информацию разного типа
St.Read(buf,SizeOf(buf));
end;
но дело то как раз в том что заранее мне не известно -какой размер блока мне нужно протчитать :(
← →
Virgo_Style © (2006-03-18 18:15) [1]у Stream есть Position, ты об этом не забываешь? я забывал)
← →
Virgo_Style © (2006-03-18 18:16) [2]Хотя вообще-то по описанию не похоже, что дело в нем...
← →
beglec © (2006-03-18 18:17) [3]не забываю :)))
но вопрос не косается Position :)))
это после
а сейчас меня просто инетересует почему не читаются данные в первом варианте ?
← →
Virgo_Style © (2006-03-18 18:25) [4]а попробуй-ка Read(buf[0], ...), там же параметр - сам буфер, а не указатель на него
← →
beglec © (2006-03-18 18:42) [5]По моему я вижу зеленых человечков :(
решил проверить все таки Position - просто на прямую. оказалось очень интересно
Итак:
входные данные
размер потока: 21780 byte - все в данных - то есть
размер чтения 980 byte;
попытка прочитать 1 запись SendStream[IDS].NumberRec=1;
SendStream[IDS].ReadSize:=980;
Было
Poss:=SendStream[IDS].NumberRec*SendStream[IDS].ReadSize;
poss показывает 21780 :(((( - хотя по идеии 980.
Проверяю понимаю что что- то не так
переделываю и получаю
Poss:=(SendStream[IDS].NumberRec-1)*SendStream[IDS].ReadSize;
работает все :((((
вот и сижу чешу репу - что я сделал такого ?????
← →
beglec © (2006-03-18 19:09) [6]перегрузил Delphi вообще работать перестала :(
что то совсем запутался
← →
beglec © (2006-03-18 19:15) [7]
> а попробуй-ка Read(buf[0], ...), там же параметр - сам буфер,
> а не указатель на него
Уважаемый Virgo_Style
А какое отличие между
Read(buf, ...)
Read(buf[0], ...)
Read(buf[1], ...) ???
Опишите поподробне пожалуйста
← →
Virgo_Style © (2006-03-18 21:01) [8]попробую простыми словами, ибо сложных уже и сам не вспомню %-)
пусть у нас будут статический и динамический массивы sbuf и dbuf. Разница между ними в том, что статический массив - штука безхитростная и подставить sbuf - это то же, что и sbuf[0]. Динамический же массив отличается тем, что dbuf не эквивалентен dbuf[0], ибо dbuf - это указатель на первый (нулевой) элемент массива (что такое указатели, я объяснять не буду, даже если надо %-) ).
Итого. (1) Когда в read(var buffer; ...) мы подставим "sbuf" - мы передадим в качестве параметра сам массив, без всяких хитростей.
Подставив же "dbuf" (2), мы передадим не массив, а указатель на него, и результат будет записываться на место адреса динамического массива. Подставляя же dbuf[0] (3), мы передадим первый элемент динамического массива, то есть, то же, что и в варианте (1).
Образно:
приходите вы, ну пусть зачет автоматом сдавать %-)
Даете свою зачетку - вам ставят зачет. Это вариант sbuf.
Даете записку "Вася ждет вас на углу" - зачет Васе нарисуют в этой бумажку, и что с ней делать - неизвестно %-). Это dbuf.
Но если привести Васю к преподавателю (dbuf[0]) - то все, опять же, будет в порядке, и Вася зачет получит %-).
Вот, на пальцах... что-то около и возле. лучше, конечно, почитать что-нибудь более умное и строгое %-)
P.S. Предполагается, что индексация sbuf начинается с нуля.
← →
Desdechado © (2006-03-18 22:07) [9]buf^
Страницы: 1 вся ветка
Текущий архив: 2006.04.02;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.042 c