background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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();

background image

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);

background image

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).


Document Outline