V kódu máte chybku, čtete to prostě špatně. Když se podíváte, co se děje, tak je jasné, že vy přečtete 1025 bajtů a pak si NetworkStream zavřete. To samozřejmě není to, co byste chtěl. Správné čtení ze streamu po kouskách může vypadat třeba takhle:
Dim buffer(1023) As Byte, bytesRead As Integer
Do
bytesRead = stream.Read(buffer, 0, buffer.Length)
text &= System.Text.Encoding.ASCII.GetString(buffer, 0, bytesRead)
Loop While bytesRead = buffer.Length
stream.Close()
buffer je pole, do kterého se ukládají načítané kousky, metoda Read vrací počet přečtených bajtů. Pokud se načetlo ze streamu méně bajtů, než je délka bufferu, pak jsme už skončili, pokud se načetlo 1024 bajtů, s nejvyšší pravděpodobností budou ještě další data, která máme přečíst. To, co přečteme, si postupně ukládáme do Stringové proměnné. Dejte ovšem pozor na kódování češtiny, pokud používáte nějaké windows-1250, bude vše fungovat dobře (akorát místo Encoding.ASCII musíte dát Encoding.Default). Pokud ale máte XML soubor v UTF-8 (anebo kódování není uvedeno, to se pak UTF-8 předpokládá automaticky), vězte, že jeden znak nerovná se 1 bajt. Takže v místě rozdělení 1024 bajtových bloků mohou nastat chyby, jeden znak se rozdělí na dva jiné, které nic neznamenají. Pro práci s UTF-8 daty je lepší celý soubor uložit do jednoho pole (resp. MemoryStreamu) a pak jej teprve převést na finální string, což ale u velkých souborů není příliš vhodné.
|