Главная страница
    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.046 c
3-1139373952
apl
2006-02-08 07:45
2006.04.02
Список таблиц в базе данных


2-1142486308
Canopus
2006-03-16 08:18
2006.04.02
Запмсь текстового файла


15-1141749259
ArtemESC
2006-03-07 19:34
2006.04.02
JavaScript - как напечатать в данном месте стр. строку?


1-1141196864
max3
2006-03-01 10:07
2006.04.02
имя пользователя


2-1142500422
tytus
2006-03-16 12:13
2006.04.02
BM_SETIMAGE





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский