Pytanie:
Czym się różni FileStream
i StreamWriter
w .Net ?
W jakim kontekście masz go użyć? Jaka jest ich zaleta i wada?
Czy można połączyć te dwa w jedno?
Odpowiedzi:
Czym różni się FileStream i StreamWriter w dotnet?
A FileStream
jest Stream
. Podobnie jak wszystkie strumienie, zajmuje się tylko byte[]
danymi.
A StreamWriter : TextWriter
, jest dekoratorem strumienia. TextWriter koduje dane tekstowe, takie jak ciąg lub znak, byte[]
a następnie zapisuje je w połączonym Stream
.
W jakim kontekście masz go użyć? Jaka jest ich zaleta i wada?
Gdy masz byte[]
dane, używasz samego FileStream . Dodajesz StreamWriter
kiedy chcesz napisać tekst. Użyj programu formatującego lub serializatora, aby pisać bardziej złożone dane.
Czy można połączyć te dwa w jedno?
Tak. Aby utworzyć StreamWriter, zawsze potrzebujesz strumienia. Metoda pomocnicza System.IO.File.CreateText("path")
utworzy je w kombinacji, a następnie wystarczy Dispose () zewnętrzny zapisujący.
FileStream zapisuje bajty, StreamWriter zapisuje tekst. To wszystko.
FileStream jest jawnie przeznaczony dla plików roboczych.
StreamWriter może służyć do przesyłania strumieniowego do dowolnego typu strumienia - gniazd sieciowych, plików itp.
ScottGu całkiem ładnie wyjaśnia różne obiekty Stream tutaj: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223
Cóż, z MSDN dla FileStream
:
Udostępnia Stream wokół pliku, obsługując synchroniczne i asynchroniczne operacje odczytu i zapisu.
oraz MSDN dla StreamWriter
:
Implementuje TextWriter do pisania znaków w strumieniu w określonym kodowaniu.
Najbardziej oczywistą różnicą jest to, że FileStream
pozwala na operacje odczytu / zapisu, podczas gdy StreamWriter
jest to tylko zapis.
StreamWriter
Strona idzie do dodania:
StreamWriter jest przeznaczony do wyprowadzania znaków w określonym kodowaniu, podczas gdy klasy pochodne od Stream są przeznaczone do bajtów wejściowych i wyjściowych.
Więc druga różnica dotyczy FileStream
bajtów, podczas gdy StreamWriter
dotyczy tekstu.
Są to dwa różne poziomy wykorzystywane do przekazywania informacji do znanych źródeł danych.
A FileStream
to typ strumienia, który jest koncepcyjnie mechanizmem wskazującym na jakąś lokalizację i może obsługiwać dane przychodzące i / lub wychodzące do iz tej lokalizacji. Istnieją strumienie do odczytu / zapisu do plików, połączeń sieciowych, pamięci, potoków, konsoli, detektorów debugowania i śledzenia oraz kilku innych typów źródeł danych. W szczególności FileStream
istnieje do wykonywania odczytów i zapisów w systemie plików. Większość strumieni ma dość niski poziom wykorzystania i traktuje dane jako bajty.
A StreamWriter
jest opakowaniem dla Stream, które upraszcza używanie tego strumienia do wyprowadzania zwykłego tekstu. Udostępnia metody, które pobierają ciągi zamiast bajtów i wykonuje niezbędne konwersje do iz tablic bajtowych. Są inni pisarze; drugim głównym, którego użyjesz, jest ten XmlTextWriter
, który ułatwia zapisywanie danych w formacie XML . Istnieją również odpowiedniki programu Reader dla Writerów, które podobnie zawijają strumień i ułatwiają odzyskiwanie danych.
FileStream
jest to rodzaj strumienia, który jest specjalnie dostosowany do plików. Strumienie natywnie działają z bajtami, jednakStreamWriter
/ Reader będzie zapisywać / odczytywać tekst w dowolnym strumieniu, nie tylkoFileStream
s. Na przykładMemoryStreams
,NetworkStreams
itp ..