Wykład 8
Strumienie, serializacja,
pliki
dr inż. Maciej Kusy
Katedra Podstaw Elektroniki
Wydział Elektrotechniki i Informatyki
Politechnika Rzeszowska
Programowanie w języku C#
Programowanie w języku C#. Maciej Kusy,
mkusy@prz.edu.pl
2
Plan wykładu
• Strumienie
- operacje we/wy binarne i tekstowe
- odczyt i zapis danych (pliki binarne i tekstowe)
• Serializacja
- pojęcie serializacji i deserializacji, rodzaje
serializacji
- używanie formatera
• Manipulowanie katalogami
• Używanie plików
Programowanie w języku C#. Maciej Kusy,
mkusy@prz.edu.pl
3
Strumienie
Strumień to wprowadzanie i wyprowadzanie
informacji od źródła do ujścia. W strumieniu
dane płyną jak pęcherzyki powietrza w
strumieniu wody.
Punktem docelowym strumienia może być
konsola, plik, drukarka, połączenie z siecią lub
internetem.
Platforma .NET udostępnia strumienie
buforowane i niebuforowane oraz klasy do
obsługi operacji wejścia-wyjścia.
Źródłem strumienia może być np. klawiatura,
plik...
Programowanie w języku C#. Maciej Kusy,
mkusy@prz.edu.pl
4
Operacje we/wy binarne i
tekstowe
Operacje we/wy tekstowe – strumień
przesyła jakąś informację i dodatkowo ją
formatuje (interpretuje). Formatowanie
sprawia, że wartości obiektów, stają się
czytelne dla użytkownika, np.:
double d = 123.456;
System.Console.WriteLine(d);
Operacje we/wy binarne – strumień „nie
interesuje się” znaczeniem bajtów, które
przesyłane są od źródła do ujścia. Bajty nie są
interpretowane w żaden sposób (komunikacja z
programem, urządzeniem). Odbywa się tylko
ich przepływ przez strumień.
Programowanie w języku C#. Maciej Kusy,
mkusy@prz.edu.pl
5
Odczyt i zapis danych
Klasa Stream odpowiedzialna jest za odczyt i
zapis danych.
Obsługuje synchroniczne i asynchroniczne operacje we/wy
.
Klasa Stream udostępnia liczne klasy
pochodne, np.:
BufferedStream – udostępnia mechanizm
buforowania, FileStream – umożliwia dostęp
do plików,
NetworkStream – działa poprzez połączenia
sieciowe,
StreamReader – odczytuje dane z łańcuchów
znaków,
StreamWriter – zapisuje dane do łańcuchów
znaków.
Klasa Stream odpowiedzialna jest za odczyt i
zapis danych.
Programowanie w języku C#. Maciej Kusy,
mkusy@prz.edu.pl
6
Serializacja
Serializacja – proces konwertowania
obiektu (lub kolekcji obiektów) na format
nadający się do zapisania w pamięci, pliku,
bazie danych.
Deserializacja jest procesem odwrotnym –
serializowany strumień bajtów
konwertowany jest z powrotem do postaci
oryginalnego obiektu (lub kolekcji
obiektów).
Serializacji używa się również do przesyłania
danych za pośrednictwem sieci (np. poprzez
usługi Web Service).
Programowanie w języku C#. Maciej Kusy,
mkusy@prz.edu.pl
7
Rodzaje
serializacji
• Serializacja binarna: wykorzystuje klasę
BinaryFormatter do serializowania typu danych
do postaci strumienia binarnego,
• Serializacja protokołu SOAP: wykorzystuje klasę
SoapFormatter do serializowania typu danych do
postaci kodu języka XML zgodnego ze standardami
protokołu SOAP (Simple Object Access Protocol),
• Serializacja do formatu XML: wykorzystuje
klasę XmlSerializer do serializowania typu
danych do postaci kodu języka XML (stosowany
przez usługi sieciowe Web Service).
W technologia .NET zaimplementowano
obsługę trzech głównych rodzajów
serializacji:
Programowanie w języku C#. Maciej Kusy,
mkusy@prz.edu.pl
8
Proces serializacji binarnej
Stwórz obiekt
FileStream
:
FileStream fs = new FileStream(path,
FileMode.Create);
Stwórz obiekt
BinaryFormatter
:
BinaryFormatter bf = new BinaryFormatter();
Dokonaj serializacji kolekcji obiektów – metoda
Serialize
:
ArrayList lista = new ArrayList();
bf.Serialize(fs, lista);
fs.Close();
Programowanie w języku C#. Maciej Kusy,
mkusy@prz.edu.pl
Serializowana klasa musi mieć atrybut
[Serializable]
Dokonaj deserializacji – metoda
Deserialize
:
fs = new FileStream(path, FileMode.Open);
ArrayList nowa = (ArrayList)bf.Deserialize(fs);
fs.Close();
9
Manipulowanie
katalogami
Wybrane składowe klasy DirecoryInfo:
CreationTime – pobiera i ustawia czas utworzenia
katalogu,
Exists – zwraca true jeśli katalog istnieje,
FullName – zwraca pełną ścieżkę dostępu do
katalogu,
Parent – zwraca katalog nadrzędny katalogu,
Create(), Delete() – tworzy, usuwa katalog,
GetDirectories() – zwraca tablicę podkatalogów,
GetFiles() – zwraca listę plików katalogu.
Klasa DirectoryInfo udostępnia metody do
pobierania nazw zawieranych plików, katalogów,
pozwala pobrać podkatalogi i sprawdzić ich
zawartość.
Programowanie w języku C#. Maciej Kusy,
mkusy@prz.edu.pl
DirectoryInfo dir = new DirectoryInfo(path);
10
Używanie plików
CopyTo() – metoda kopiująca istniejący plik do
nowego
katalogu,
Create() – metoda tworząca plik,
Delete() – metoda usuwająca określony plik z
dysku,
MoveTo() – metoda przenosząca plik do nowej
lokalizacji.
Klasa FileInfo przypomina pod względem
funkcjonalności odpowiednik – klasę
DirectoryInfo. Udostępnia przydatne operacje
związane z plikami, np.:
Programowanie w języku C#. Maciej Kusy,
mkusy@prz.edu.pl
Name – właściwość zwracająca nazwę pliku,
Length – właściwość zwracająca rozmiar pliku
w bajtach,
CreationTime – właściwość zwracająca datę i
godzinę
utworzenia pliku (obiekt
DateTime).