Gyakori feladat, hogy egy .NET C# NetworkStreamből kell kiolvasni a benne rejlő adatot a NetworkStream.Read(byte[] buffer, int offset, int size):int metódussal.
Az alábbi linken van hozzá egy jó módszer, miként célszerű használni:
https://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.dataavailable(v=vs.110).aspx
Fontos odafigyelni a Read hívásánál, hogy a visszatérési értékben kapjuk meg, hogy hány bájt volt a ténylegesen kiolvasott adat. Ne akarjunk a pufferből annál több elemet kiolvasni, a stringgé alakításkor a többi karakter a '\0' értéket fogja felvenni.
Ha mégis megfeledkeznénk erről és a teljes puffer tartalmát használjuk, akkor sem fog hibát dobni. Viszont létezik olyan .NET C# implementáció, mint a MONO, amiben a '\0' a null-terminator, azaz a stringet "lezáró nulla", emiatt pedig mindent eldob, ami utána van.
Ez a viselkedés olyan értelmetlennek tűnő szituációkat tud teremteni, mint hogy az így előállított stringhez a konkatenációval nem lehet semmit sem hozzáfűzni, és még hibát sem dob.
Ez a viselkedés olyan értelmetlennek tűnő szituációkat tud teremteni, mint hogy az így előállított stringhez a konkatenációval nem lehet semmit sem hozzáfűzni, és még hibát sem dob.
Bővebben a C++ lezáró nulla karakterről:
https://msdn.microsoft.com/en-us/library/69ze775t.aspx
Nincsenek megjegyzések:
Megjegyzés küldése