Hogyan kell pontosan olvasni és írni a sorokat egy adatfolyamban?

# xA0; # xA0; // Írj.
# xA0; s: = "néhány szöveg";
# xA0; k: = hossza (i);
# xA0; aStream.Write (k, 4);
# xA0; aStream.Write (s [1], k);

# xA0; # xA0; // Read.
# xA0; aStream.Read (k, 4);






# xA0; SetLength (s, k);
# xA0; aStream.Read (s [1], k);

Mindig helyes?

aStream.Read (k, SizeOf (Integer));
SetLength (s, k);
aStream.Read (PChar (s) ^, k * SizeOf (Char));

SizeOf (Char) jelentős, mert a Delphi utolsó verzióiban az alapértelmezett sorok unicode.


> Ez mindig így van?

Mindig helyes a Read / WriteBuffer módszerek használata.
Read / Write módszerek nem jelentheti a hibát, ha van ilyen, bármilyen okból során keletkezik egy patak olvasási / írási, feltéve, hogy az eredmények a módszerek hívni teljesen figyelmen kívül hagyja.

Itt nem helyes:
aStream.Read (s [1], k);

ehhez újra kell írni:

aStream.ReadBuffer (k, 4);
SetLength (s, k);
ha k> 0 akkor
# xA0; aStream.ReadBuffer (s [1], k);
Ellenkező esetben, ha a karakterlánc hossza nulla, akkor amikor s [1] -et hívunk, akkor határtalanul hat.

És ha a vonal hossza nagyobb, mint 255, akkor nincs túlmutató?
Megértem, hogy egy karaktersorozat karakterek sorozata, amelynek nulla eleme a s [0] hosszúságú. És az elem egy byte.

Az osztályok kódja a következő:

TStream.ReadBuffer eljárás (var puffer; Számláló: Longint);
kezdődik
# xA0; ha (Száml <> 0) és (Olvasás (puffer, szám) <> Gróf)
# xA0; # xA0; emelje az EReadError.CreateRes (@SReadError);
végén;

Néhány feldolgozás nem helyes. Ha számlálás = 0, akkor nem kell hibákat adnod, de nem kell olvasnod semmit a streamből, hanem úgy, mintha olvasnád a 0 bájtot.







Ha kevésbé tartják adatot, mint egy patak ott, akkor megjelenik egy ablak három gomb, „ismétlés”, „stop”, „figyelmen kívül hagyja”. Ha az ismételt, az azt jelenti, hogy megpróbálja olvasni a szükséges adatokat, ha figyelmen kívül hagyja, hogy mintha, hogy minden normálisnak tekinthető, ha abbahagyja, akkor is, és dobni egy kivételt.


> És ha a vonal hossza meghaladja a 255-et, akkor nincs túlmutató?
>
> Megértettem, hogy egy karakterlánc nullához tartozik
> amelyhez az s [0] hosszúságú elemet írjuk. És az elem egy byte.
>
>

Ezeket a vonalakat sokáig nem látták.

> És ha a vonal hossza meghaladja a 255-et, akkor nincs túlmutató?
> Megértem, hogy egy karaktersorozat karakterek sorozata, amelynek nulla eleme a s [0] hosszúságú. És az elem egy byte.

> A dcu kompatibilisek a Delphi 7 programmal?
dcu nem kompatibilis a Delphi bármely verziójával


> Szergej # xA0; (18.11.10 16:29) [4]

> Néhány hiba feldolgozása

A feldolgozás helyes, ne hordozzon értelmetlen dolgokat.
A fejed vagy a logika abban van, hogy rossz)

Nem akarsz kivételeket mondani a problémáról?
Igen, használja a Read / Write-ot az egészségre, senki sem tiltakozik.
De akkor ne kivizsgál később görbék Windu és Delphi, ha nem reagál a visszatérési eredmények előbb-utóbb elmúlik egy gereblye)

Te ebben, legalább rendeld ki)
És ebben a "lebegő", és ott - síléc mossa sokkal összetettebb termékek)


> Néhány feldolgozás nem helyes. Ha számlál = 0, akkor
> minden hibát ki kell adni

A megadott kód szerint a count = 0 esetén nincs hiba, és nem.


> Ha kevesebb adatot számol be, mint ami a patakban van, akkor szüksége van rá
> megjelenít egy ablakot három gombbal, "ismételni", "stop",
> # xA0; "figyelmen kívül hagyni".

Képzeld el a helyzetet: a kiszolgálón a kiszolgálón a kód fut. Ez azt jelenti, hogy egyetlen felhasználó sincs jelen, de az ügyfélprogram kérését egyszerűen feldolgozzák. Volt ilyen helyzet.
És ki fogja megnyomni a gombot? Amíg nem kattintottál, a szál áll, az ügyfél úgy gondolja, hogy a kiszolgáló összeomlott (sőt, így van).


> Ha megismétli, akkor azt jelenti, hogy megpróbálja befejezni a szükségeseket
> adatokat, ha figyelmen kívül hagyja, akkor úgy tételezzük fel, hogy mindent elolvastunk
> Normális, ha leállsz, akkor kivételt generálsz.
>

És a felhasználó akkor tudja, hogyan tudja figyelmen kívül hagyni ezt a hibát, és mi szerepel a streamben?

Memória: 0,75 MB
Idő: 0.037 c




Kapcsolódó cikkek