C # using streams
Strumienie są dla mnie trochę tajemnicze. Nie wiem kiedy i jak używać tego strumienia. Czy ktoś może mi wyjaśnić, w jaki sposób wykorzystuje się strumienie?
Jeśli dobrze rozumiem, są trzy rodzaje strumieni:
stream
read stream
write stream
Memorystream
a FileStream
? 7 answers
A stream jest obiektem służącym do przesyłania danych. Istnieje ogólna Klasa strumienia System.IO.Stream
, z którego pochodzą wszystkie inne klasy strumienia w. NET. Klasa Stream
zajmuje się bajtami.
Konkretne klasy strumienia są używane do radzenia sobie z innymi typami danych niż bajty. Na przykład:
- klasa
FileStream
jest używana, gdy zewnętrznym źródłem jest plik -
MemoryStream
służy do przechowywania danych w pamięci -
System.Net.Sockets.NetworkStream
obsługuje sieć dane
Strumienie Reader/writer takie jak StreamReader
i StreamWriter
nie są strumieniami - nie pochodzą z System.IO.Stream
, są zaprojektowane tak, aby pomóc w zapisywaniu i odczytywaniu danych z I do strumienia!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-24 04:36:05
Aby rozwinąć trochę inne odpowiedzi tutaj i pomóc wyjaśnić wiele przykładowego kodu, który zobaczysz kropkowany o, większość czasu nie czytać i pisać bezpośrednio do strumienia. Strumienie są niskopoziomowym środkiem do przesyłania danych.
Zauważysz, że funkcje do odczytu i zapisu są zorientowane na bajty, np. WriteByte (). Nie ma funkcji do radzenia sobie z liczbami całkowitymi, łańcuchami itp. To sprawia, że strumień jest bardzo uniwersalny, ale mniej prosty w obsłudze, jeśli, powiedzmy, chcesz po prostu aby przesłać tekst.
Jednak. Net zapewnia klasy, które konwertują między natywnymi typami i niskopoziomowym interfejsem strumienia i przesyłają dane do lub ze strumienia za Ciebie. Niektóre godne uwagi takie klasy to:
StreamWriter // Badly named. Should be TextWriter.
StreamReader // Badly named. Should be TextReader.
BinaryWriter
BinaryReader
Aby ich użyć, najpierw zdobywasz swój strumień, a następnie tworzysz jedną z powyższych klas i kojarzysz ją ze strumieniem. Np.
MemoryStream memoryStream = new MemoryStream();
StreamWriter myStreamWriter = new StreamWriter(memoryStream);
StreamReader i StreamWriter konwertują między natywnymi typami i ich reprezentacjami ciągów, a następnie przenoszą ciągi do i ze strumienia jako bajty. Więc
myStreamWriter.Write(123);
Napisze " 123 " (trzy znaki '1', '2' i '3') do strumienia. Jeśli masz do czynienia z plikami tekstowymi (np. html), StreamReader i StreamWriter to Klasy, których byś użył.
]}
myBinaryWriter.Write(123);
Zapisze cztery bajty reprezentujące 32-bitową wartość całkowitą 123 (0x7B, 0x00, 0x00, 0x00). Jeśli masz do czynienia z plikami binarnymi lub protokołami sieciowymi BinaryReader i BinaryWriter są tym, czego możesz użyć. (Jeśli wymieniasz dane z sieci lub innych systemów, trzeba pamiętać o endianness, ale to kolejny post.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:01
Strumienie są dobre do radzenia sobie z dużą ilością danych. Gdy niepraktyczne jest jednoczesne ładowanie wszystkich danych do pamięci, możesz otworzyć je jako strumień i pracować z małymi fragmentami.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-10 09:47:54
Zacznę od czytania streamów na MSDN: http://msdn.microsoft.com/en-us/library/system.io.stream.aspx
Memorystream i FileStream to strumienie używane odpowiednio do pracy z surową pamięcią i plikami...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-10 09:44:06
Istnieje tylko jeden podstawowy typ Stream
. Jednak w różnych okolicznościach niektórzy członkowie będą rzucać wyjątek, gdy zostaną wywołani, ponieważ w tym kontekście operacja nie była dostępna.
Na przykład a MemoryStream
jest po prostu sposobem na przenoszenie bajtów do i z kawałka pamięci. Stąd możesz wywołać Odczyt i zapis na nim.
Z drugiej strony a FileStream
pozwala na odczyt lub zapis (lub oba) z / do pliku. To czy potrafisz czytać czy pisać zależy od tego jak plik został otwarty. Nie można zapisywać do pliku, jeśli został on otwarty tylko dla dostępu do odczytu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-10 09:45:42
Stream jest tylko abstrakcją (lub opakowaniem) nad physical
strumieniem bajtów. Ten strumień physical
nazywa się base stream
. Tak więc zawsze istnieje strumień bazowy, nad którym tworzony jest stream wrapper, a tym samym wrapper jest nazwany od podstawowego strumienia typu ie FileStream
, MemoryStream
itd.
Zaletą wrappera strumienia jest to, że otrzymujesz zunifikowane api do interakcji ze strumieniami dowolnego podstawowego typu usb, file
itp.
dlaczego traktujesz dane jako strumień - ponieważ kawałki danych są ładowane na żądanie, możemy sprawdzać/przetwarzać dane jako kawałki, a nie ładować całe dane do pamięci. W ten sposób większość programów zajmuje się dużymi plikami, np. szyfrowaniem pliku obrazu systemu operacyjnego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-20 11:25:34
Nie nazwałbym tych różnych strumieni. Klasa Stream posiada właściwości CanRead i CanWrite, które informują, czy dany strumień może być odczytywany i zapisywany do.
Główną różnicą pomiędzy różnymi klasami strumienia (np. MemoryStream vs FileStream) jest magazyn kopii zapasowych - gdzie dane są odczytywane lub gdzie są zapisywane. To oczywiste z nazwy. MemoryStream przechowuje dane tylko w pamięci, FileStream jest wspierany przez plik na dysku, a NetworkStream odczytuje dane z sieci i tak dalej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-10 09:46:00