Главная страница
    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.47 MB
Время: 0.042 c
2-1142880657
olejik
2006-03-20 21:50
2006.04.02
Форма


15-1142145294
Kerk
2006-03-12 09:34
2006.04.02
Ребяты, устроим консилиум


4-1137143025
axx
2006-01-13 12:03
2006.04.02
SendMessage из TThread


2-1142337389
Emik
2006-03-14 14:56
2006.04.02
Interbase


2-1142493856
serg111111
2006-03-16 10:24
2006.04.02
Помогите с сервисом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский