Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Czytanie, pisanie i rysowanie (czyli klasa I szkoły podstawowej)

Podobne prezentacje


Prezentacja na temat: "Czytanie, pisanie i rysowanie (czyli klasa I szkoły podstawowej)"— Zapis prezentacji:

1 Czytanie, pisanie i rysowanie (czyli klasa I szkoły podstawowej)

2 Java IO, czyli strumienie, readery, writery i bajery Ideologia : Na początku jest strumień (InputStream lub OutputStream) –Pochodzący z pliku (File...Stream) lub z tablicy bajtów (ByteArray...Stream) i jeszcze z paru innych źródeł –Przyozdabiany (Buffered...Stream, Data...Stream, GZIP...Stream) Ale zawsze jest to strumień BAJTÓW Do IO binarnego!

3 Nauka czytania i pisania binarnego, czyli strumienie InputStream ma tylko: byte read() read(byte[] in ) skip(int n) close() I można go spytać, czy ma mark() i reset() (markSupported()) DataInputStream ma ponadto: readBoolean(),...,readDouble() A np. ObjectInputStream potrafi czytać obiekty (zserializowane)

4 Strumienie – cd. Łatwo się domyśleć, co potrafi np. DataOutputStream write (byte b, int off, int len), writeInt(int n),..., flush(), size() etc. Uwaga: java czyta i pisze binarnie Big endian!!! (od najstarszego bajtu) Intel (czyli pecety) czytają i piszą Little endian!!! Konwersja: via byte buffer[] i ByteArray...Stream lub "manualna" W necie są gotowe klasy/pakiety

5 Słów parę o abstrakcji Klasa abstrakcyjna czyli Poszukiwane Ogniwo Pośrednie między klasą i interfejsem – prefiksowane abstract deklaracje metod (bez implementacji). Po co to? Planowo: zbiorczy interfejs dla grupy podobnych klas zawierający implementację wspólnych metod "Tak wyszło": mamy kilka różnych klas z niepustą częścią wspólną, którą wyrzucamy do klasy abstrakcyjnej i dziedziczymy po niej – oszczędzamy na objętości kodu i jego modyfikacjach

6 Słów parę o abstrakcji abstract public class DataReader{ protected static String name = "New Reader"; protected static String shortName = "New"; protected DataReader() { jakieś inicjalizacje... } public final String getName() {return name;} abstract public boolean readMol(Molecule mol); } public class XXXReader extends DataReader{ protected static String name = "XXX Reader"; protected static String shortName = "XXX"; public XXXReader() {super(); inicjalizacja specyficzna...} public boolean readMol(Molecule mol){...} } Przykład dziedziczenia

7 Słów parę o abstrakcji – deklaracja i tworzenie obiektu... Molecule mol = new Molecule(); DataReader reader; switch (readerType) { case TYPE_XXX: reader = new XXXReader(); break;... } reader.readMol(mol); Jak widać, wybór konkretnej implementacji DataReadera może być dokonany dopiero w trakcie wykonywania programu.

8 Nauka czytania i pisania znakowego czyli readery i writery Java wierzy w UNICODE Dlatego char to są 2 bajty! String to łańcuch znaków, więc do czytania i pisania znakowego musimy używać klas Reader/Writer o odpowiednim smaku

9 Co potrafi reader/writer BufferedReader: readLine(); BufferedWriter: print(String), println(String); printf(String,...) (formatowanie podobne do C : printf("%3d %6f.2 %n",i,x);

10 Sztuka pakowania (aka. Dekorowania) Jeżeli chcemy czytać lub pisać znakowo używając binariów musimy użyć Readera/Writera zrobionego ze strumienia przez odpowiednią dekorację: BufferedReader r = new BufferedReader( new InputStreamReader( new FileInputStream(fName))); BufferedWriter w = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(fName))); Dekoracja – wzorzec polegający na zamknięciu klasy prostszej w bardziej skomplikowanej i "eksport" metod klasy dekorowanej z "opakowującym" konstruktorem

11 Sztuka pakowania – cd. Z pakowania możemy skorzystać implementując wielokrotne dziedziczenie: public class A{ public void aqq(...) {...} } public class B{ public void bqq(...) {...} public void setI(int t){ this.t = t; }... } interface IntA{ public void aqq(...); } interface IntB{ public void bqq(...); public void setI(int t);... } public class AB extends A implements IntB{ B b = new b();... (np. konstruktory z parametrami dla A i B) public void bqq(...){ b.bqq(); public void setT(int t){ b.setT(t);... } lub public class BA extends B implements IntA... lub public class C implements IntA,IntB

12 A teraz czytanie ze zrozumieniem Reader pozwala na przeczytanie wiersza String line = reader.readLine(); Musimy teraz przeczytać line: String[] tokens = line.split(" +|, *|; *"); (np.: line="1 2, 3.45; aaa" da tokens={"1","2","3.45","aaa"}) i rozszyfrować każdy token z osobna: int i = Integer.parseInt(token[0]); int j = Integer.parseInt(token[1]); float t = Float.parseFloat(token[2]); String txt = new String(token[3]);

13 Łapanie pcheł i wyjątków Próba skompilowania kodu zawierającego takie czytanie/pisanie da błędy!!! Metody klas...Stream,...Reader,...Writer oraz parse... mogą zgłosić wyjątek, który trzeba przechwycić lub wyrzucić wyżej

14 Spróbuj i złap lub odrzuć dalej try{ instrukcje "podejrzane" } catch...Exception e{ obsługa e (typowo: e.printStackTrace();) } lub public void readSomething(...) throws...Exception e{... } i niech inni się martwią, co z tym zrobić


Pobierz ppt "Czytanie, pisanie i rysowanie (czyli klasa I szkoły podstawowej)"

Podobne prezentacje


Reklamy Google