Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.026 c
9-1127156256
Ricks
2005-09-19 22:57
2006.04.02
Рисование большого ландшафта


6-1135147258
Jumaric
2005-12-21 09:40
2006.04.02
Запуск программы


15-1141968672
nap<>
2006-03-10 08:31
2006.04.02
Сервисы


10-1115880709
Oleg_
2005-05-12 10:51
2006.04.02
интерфейс не поддерживается


3-1139211904
Fynjy1984
2006-02-06 10:45
2006.04.02
Вычисляемое поле