Java. Techniki zaawansowane. Wydanie XI - ebook
Java. Techniki zaawansowane. Wydanie XI - ebook
Java jest dojrzałym językiem programowania, który pozwala na pisanie kodu dla wielu rodzajów komputerów służących do różnych celów i działających na różnych platformach. Jest świetnym wyborem dla programistów, którym zależy na tworzeniu bezpiecznych aplikacji o wyjątkowej jakości. Wokół Javy skupia się duża społeczność, dzięki której język ten wciąż się rozwija, unowocześnia i wzbogaca o nowe elementy. Osoby, które swoje zawodowe życie wiążą z pisaniem programów w Javie, muszą poznać zaawansowane zagadnienia i mniej oczywiste funkcjonalności Javy, również te niedawno zaimplementowane. To konieczność dla każdego profesjonalnego programisty Javy.
Oto kolejne, przejrzane, zaktualizowane i uzupełnione wydanie znakomitego podręcznika dla zawodowych programistów Javy. Znalazł się tu dokładny opis sposobów tworzenia interfejsu użytkownika, stosowania rozwiązań korporacyjnych, sieciowych i zabezpieczeń, a także nowości wprowadzonych w JDK 11. Przedstawiono techniki programowania baz danych oraz umiędzynarodowiania aplikacji Javy. Sporo uwagi poświęcono bibliotece Swing oraz jej wykorzystaniu do tworzenia realistycznej grafiki i efektów specjalnych. Ponadto w książce zostały pokazane nowe możliwości języka - zademonstrowano, jak dzięki nim uzyskać wyjątkową jakość aplikacji, a zamieszczone przykłady opracowano pod kątem zrozumiałości i wartości praktycznej.
W tej książce między innymi:
- API wejścia-wyjścia Javy, serializacja i wyrażenia regularne
- efektywne korzystanie z usług sieciowych
- klienty, serwery i pobieranie danych z internetu
- moduły platformy Javy
- nowoczesne mechanizmy bezpieczeństwa w Javie
Java: nowoczesny styl, najlepsze praktyki, sprawdzone rozwiązania!
Spis treści
Wstęp 11
Podziękowania 15
Rozdział 1. Strumienie 17
- 1.1. Od iteracji do operacji na strumieniach 18
- 1.2. Tworzenie strumieni 20
- 1.3. Metody filter, map oraz flatMap 26
- 1.4. Pobieranie podstrumieni i łączenie strumieni 27
- 1.5. Inne przekształcenia strumieni 29
- 1.6. Proste operacje redukcji 30
- 1.7. Typ Optional 32
- 1.7.1. Pobieranie wartości Optional 32
- 1.7.2. Korzystanie z wartości Optional 33
- 1.7.3. Potoki wartości opcjonalnych 33
- 1.7.4. Jak nie należy używać wartości opcjonalnych 35
- 1.7.5. Tworzenie obiektów typu Optional 36
- 1.7.6. Łączenie funkcji zwracających wartości opcjonalne przy użyciu flatMap 36
- 1.7.7. Przekształcanie wartości opcjonalnej w strumień 37
- 1.8. Gromadzenie wyników 40
- 1.9. Gromadzenie wyników w mapach 44
- 1.10. Grupowanie i podział 48
- 1.11. Kolektory przetwarzające 50
- 1.12. Operacje redukcji 54
- 1.13. Strumienie danych typów prostych 57
- 1.14. Strumienie równoległe 62
Rozdział 2. Wejście i wyjście 67
- 2.1. Strumienie wejścia-wyjścia 67
- 2.1.1. Odczyt i zapis bajtów 68
- 2.1.2. Zoo pełne strumieni 71
- 2.1.3. Łączenie filtrów strumieni wejścia-wyjścia 74
- 2.1.4. Strumienie tekstowe 78
- 2.1.5. Zapisywanie tekstu 79
- 2.1.6. Wczytywanie tekstu 81
- 2.1.7. Zapis obiektów w formacie tekstowym 82
- 2.1.8. Zbiory znaków 85
- 2.2. Odczyt i zapis danych binarnych 88
- 2.2.1. Interfejsy DataInput i DataOutput 88
- 2.2.2. Strumienie plików o swobodnym dostępie 90
- 2.2.3. Archiwa ZIP 94
- 2.3. Strumienie obiektów i serializacja 97
- 2.3.1. Zapisywanie i wczytywanie obiektów serializowalnych 97
- 2.3.2. Format pliku serializacji obiektów 101
- 2.3.3. Modyfikowanie domyślnego mechanizmu serializacji 107
- 2.3.4. Serializacja singletonów i wyliczeń 109
- 2.3.5. Wersje 110
- 2.3.6. Serializacja w roli klonowania 113
- 2.4. Zarządzanie plikami 115
- 2.4.1. Ścieżki dostępu 115
- 2.4.2. Odczyt i zapis plików 118
- 2.4.3. Tworzenie plików i katalogów 119
- 2.4.4. Kopiowanie, przenoszenie i usuwanie plików 120
- 2.4.5. Informacje o plikach 122
- 2.4.6. Przeglądanie zawartości katalogu 124
- 2.4.7. Stosowanie strumieni katalogów 125
- 2.4.8. Systemy plików ZIP 129
- 2.5. Mapowanie plików w pamięci 130
- 2.5.1. Wydajność plików mapowanych w pamięci 130
- 2.5.2. Struktura bufora danych 136
- 2.6. Blokowanie plików 138
- 2.7. Wyrażenia regularne 140
- 2.7.1. Składnia wyrażeń regularnych 141
- 2.7.2. Dopasowywanie wyrażeń regularnych do łańcucha 145
- 2.7.3. Znajdowanie wielu dopasowań 148
- 2.7.4. Podział w miejscach wystąpienia separatora 150
- 2.7.5. Zastępowanie dopasowań 150
Rozdział 3. Język XML 155
- 3.1. Wprowadzenie do języka XML 156
- 3.2. Struktura dokumentu XML 158
- 3.3. Parsowanie dokumentów XML 160
- 3.4. Kontrola poprawności dokumentów XML 169
- 3.4.1. Definicje typów dokumentów 170
- 3.4.2. XML Schema 178
- 3.4.3. Praktyczny przykład 180
- 3.5. Wyszukiwanie informacji i XPath 186
- 3.6. Przestrzenie nazw 190
- 3.7. Parsery strumieniowe 193
- 3.7.1. Wykorzystanie parsera SAX 193
- 3.7.2. Wykorzystanie parsera StAX 198
- 3.8. Tworzenie dokumentów XML 202
- 3.8.1. Dokumenty bez przestrzeni nazw 202
- 3.8.2. Dokumenty z przestrzenią nazw 203
- 3.8.3. Zapisywanie dokumentu 203
- 3.8.4. Zapis dokumentu XML za pomocą parsera StAX 206
- 3.8.5. Przykład: tworzenie pliku SVG 210
- 3.9. Przekształcenia XSL 212
Rozdział 4. Programowanie aplikacji sieciowych 221
- 4.1. Połączenia z serwerem 221
- 4.1.1. Stosowanie programu telnet 221
- 4.1.2. Nawiązywanie połączenia z serwerem z wykorzystaniem Javy 224
- 4.1.3. Limity czasu gniazd 225
- 4.1.4. Adresy internetowe 227
- 4.2. Implementacja serwerów 228
- 4.2.1. Gniazda serwera 229
- 4.2.2. Obsługa wielu klientów 231
- 4.2.3. Połączenia częściowo zamknięte 235
- 4.2.4. Przerywanie działania gniazd sieciowych 236
- 4.3. Połączenia wykorzystujące URL 242
- 4.3.1. URL i URI 242
- 4.3.2. Zastosowanie klasy URLConnection do pobierania informacji 244
- 4.3.3. Wysyłanie danych do formularzy 251
- 4.4. Klient HTTP 259
- 4.5. Wysyłanie poczty elektronicznej 266
Rozdział 5. Programowanie baz danych: JDBC 271
- 5.1. Architektura JDBC 272
- 5.1.1. Typy sterowników JDBC 272
- 5.1.2. Typowe zastosowania JDBC 274
- 5.2. Język SQL 274
- 5.3. Instalacja JDBC 280
- 5.3.1. Adresy URL baz danych 280
- 5.3.2. Pliki JAR zawierające sterownik 281
- 5.3.3. Uruchamianie baz danych 281
- 5.3.4. Rejestracja klasy sterownika 282
- 5.3.5. Nawiązywanie połączenia z bazą danych 283
- 5.4. Stosowanie poleceń SQL 285
- 5.4.1. Wykonywanie poleceń SQL 285
- 5.4.2. Zarządzanie połączeniami, poleceniami i zbiorami wyników 289
- 5.4.3. Analiza wyjątków SQL 289
- 5.4.4. Wypełnianie bazy danych 292
- 5.5. Wykonywanie zapytań 295
- 5.5.1. Polecenia przygotowane 296
- 5.5.2. Odczyt i zapis dużych obiektów 301
- 5.5.3. Sekwencje sterujące 303
- 5.5.4. Zapytania o wielu zbiorach wyników 305
- 5.5.5. Pobieranie wartości kluczy wygenerowanych automatycznie 306
- 5.6. Przewijalne i aktualizowalne zbiory wyników zapytań 306
- 5.6.1. Przewijalne zbiory wyników 307
- 5.6.2. Aktualizowalne zbiory rekordów 309
- 5.7. Zbiory rekordów 313
- 5.7.1. Tworzenie zbiorów rekordów 313
- 5.7.2. Buforowane zbiory rekordów 314
- 5.8. Metadane 317
- 5.9. Transakcje 326
- 5.9.1. Programowanie transakcji w JDBC 326
- 5.9.2. Punkty kontrolne 327
- 5.9.3. Aktualizacje wsadowe 327
- 5.9.4. Zaawansowane typy języka SQL 330
- 5.10. Zaawansowane zarządzanie połączeniami 331
Rozdział 6. API dat i czasu 333
- 6.1. Oś czasu 334
- 6.2. Daty lokalne 338
- 6.3. Modyfikatory dat 343
- 6.4. Czas lokalny 344
- 6.5. Czas strefowy 346
- 6.6. Formatowanie i parsowanie 351
- 6.7. Współdziałanie ze starym kodem 355
Rozdział 7. Internacjonalizacja 357
- 7.1. Lokalizatory 358
- 7.1.1. Dlaczego stosuje się lokalizatory? 358
- 7.1.2. Określanie lokalizatorów 359
- 7.1.3. Lokalizator domyślny 361
- 7.1.4. Nazwa lokalizatora 362
- 7.2. Formaty liczb 364
- 7.2.1. Formatowanie wartości liczbowych 364
- 7.2.2. Waluty 369
- 7.3. Data i czas 371
- 7.4. Porządek alfabetyczny i normalizacja 377
- 7.5. Formatowanie komunikatów 384
- 7.5.1. Formatowanie liczb i dat 384
- 7.5.2. Formatowanie z wariantami 386
- 7.6. Wczytywanie i wyświetlanie tekstów 388
- 7.6.1. Pliki tekstowe 388
- 7.6.2. Znaki końca wiersza 388
- 7.6.3. Konsola 389
- 7.6.4. Pliki dzienników 390
- 7.6.5. BOM - znacznik kolejności bajtów UTF-8 390
- 7.6.6. Kodowanie plików źródłowych 391
- 7.7. Komplety zasobów 391
- 7.7.1. Wyszukiwanie kompletów zasobów 392
- 7.7.2. Pliki właściwości 393
- 7.7.3. Klasy kompletów zasobów 393
- 7.8. Kompletny przykład 396
Rozdział 8. Skrypty, kompilacja i adnotacje 411
- 8.1. Skrypty na platformie Java 411
- 8.1.1. Wybór silnika skryptów 412
- 8.1.2. Wykonywanie skryptów i wiązania zmiennych 413
- 8.1.3. Przekierowanie wejścia i wyjścia 415
- 8.1.4. Wywoływanie funkcji i metod skryptów 416
- 8.1.5. Kompilacja skryptu 418
- 8.1.6. Przykład: skrypty i graficzny interfejs użytkownika 418
- 8.2. Interfejs kompilatora 423
- 8.2.1. Wywoływanie kompilatora 423
- 8.2.2. Uruchamianie zadania kompilacji 424
- 8.2.3. Przechwytywanie informacji diagnostycznych 425
- 8.2.4. Wczytywanie plików źródłowych z pamięci 425
- 8.2.5. Zapis kodów bajtowych w pamięci 426
- 8.2.6. Przykład: dynamiczne tworzenie kodu w języku Java 427
- 8.3. Stosowanie adnotacji 433
- 8.3.1. Wprowadzenie do stosowania adnotacji 434
- 8.3.2. Przykład: adnotacje obsługi zdarzeń 435
- 8.4. Składnia adnotacji 440
- 8.4.1. Interfejsy adnotacji 440
- 8.4.2. Adnotacje 441
- 8.4.3. Adnotacje deklaracji 443
- 8.4.4. Adnotacje zastosowań typów 444
- 8.4.5. Adnotacje i this 445
- 8.5. Adnotacje standardowe 447
- 8.5.1. Adnotacje kompilacji 448
- 8.5.2. Adnotacje zarządzania zasobami 448
- 8.5.3. Metaadnotacje 449
- 8.6. Przetwarzanie adnotacji w kodzie źródłowym 452
- 8.6.1. Procesory adnotacji 452
- 8.6.2. Interfejs programowy modelu języka 452
- 8.6.3. Stosowanie adnotacji do generacji kodu źródłowego 453
- 8.7. Inżynieria kodu bajtowego 456
- 8.7.1. Modyfikowanie plików klasowych 456
- 8.7.2. Modyfikacja kodu bajtowego podczas ładowania 461
Rozdział 9. System modułów platformy Javy 465
- 9.1. Pojęcie modułu 466
- 9.2. Nadawanie nazw modułom 467
- 9.3. Modularny program "Witaj, świecie!" 468
- 9.4. Żądanie użycia modułów 470
- 9.5. Eksportowanie pakietów 471
- 9.6. Modularne pliki JAR 475
- 9.7. Moduły a technika refleksji 476
- 9.8. Moduły automatyczne 479
- 9.9. Moduł nienazwany 481
- 9.10. Flagi wiersza poleceń stosowane podczas migracji 482
- 9.11. Wymagania przechodnie i statyczne 484
- 9.12. Eksport kwalifikowany i otwieranie 485
- 9.13. Wczytywanie usług 486
- 9.14. Narzędzia do pracy z modułami 489
Rozdział 10. Bezpieczeństwo 493
- 10.1. Ładowanie klas 494
- 10.1.1. Proces wczytywania plików klas 494
- 10.1.2. Hierarchia klas ładowania 495
- 10.1.3. Zastosowanie procedur ładujących w roli przestrzeni nazw 497
- 10.1.4. Implementacja własnej procedury ładującej 498
- 10.1.5. Weryfikacja kodu maszyny wirtualnej 504
- 10.2. Menedżery bezpieczeństwa i pozwolenia 508
- 10.2.1. Sprawdzanie uprawnień 508
- 10.2.2. Bezpieczeństwo na platformie Java 509
- 10.2.3. Pliki polityki bezpieczeństwa 512
- 10.2.4. Tworzenie własnych klas pozwoleń 519
- 10.2.5. Implementacja klasy pozwoleń 520
- 10.3. Uwierzytelnianie użytkowników 526
- 10.3.1. Framework JAAS 526
- 10.3.2. Moduły JAAS 531
- 10.4. Podpis cyfrowy 540
- 10.4.1. Skróty wiadomości 541
- 10.4.2. Podpisywanie wiadomości 544
- 10.4.3. Weryfikacja podpisu 546
- 10.4.4. Problem uwierzytelniania 548
- 10.4.5. Podpisywanie certyfikatów 550
- 10.4.6. Żądania certyfikatu 551
- 10.4.7. Podpisywanie kodu 552
- 10.5. Szyfrowanie 555
- 10.5.1. Szyfrowanie symetryczne 555
- 10.5.2. Generowanie klucza 557
- 10.5.3. Strumienie szyfrujące 561
- 10.5.4. Szyfrowanie kluczem publicznym 562
Rozdział 11. Zaawansowane możliwości pakietu Swing i grafiki 567
- 11.1. Tabele 567
- 11.1.1. Najprostsze tabele 568
- 11.1.2. Modele tabel 571
- 11.1.3. Wiersze i kolumny 575
- 11.1.4. Rysowanie i edycja komórek 590
- 11.2. Drzewa 601
- 11.2.1. Proste drzewa 602
- 11.2.2. Przeglądanie węzłów 616
- 11.2.3. Rysowanie węzłów 618
- 11.2.4. Nasłuchiwanie zdarzeń w drzewach 621
- 11.2.5. Własne modele drzew 627
- 11.3. Zaawansowane możliwości biblioteki AWT 635
- 11.3.1. Potokowe tworzenie grafiki 635
- 11.3.2. Figury 638
- 11.3.3. Pola 652
- 11.3.4. Ślad pędzla 653
- 11.3.5. Wypełnienia 661
- 11.3.6. Przekształcenia układu współrzędnych 663
- 11.3.7. Przycinanie 668
- 11.3.8. Przezroczystość i składanie obrazów 670
- 11.4. Grafika rastrowa 678
- 11.4.1. Odczyt i zapis plików graficznych 678
- 11.4.2. Operacje na obrazach 688
- 11.5. Drukowanie 703
- 11.5.1. Drukowanie grafiki 703
- 11.5.2. Drukowanie wielu stron 711
- 11.5.3. Usługi drukowania 720
- 11.5.4. Usługi drukowania za pośrednictwem strumieni 722
- 11.5.5. Atrybuty drukowania 725
Rozdział 12. Metody macierzyste 733
- 12.1. Wywołania funkcji języka C z programów w języku Java 734
- 12.2. Numeryczne parametry metod i wartości zwracane 740
- 12.3. Łańcuchy znaków jako parametry 742
- 12.4. Dostęp do składowych obiektu 747
- 12.4.1. Dostęp do pól instancji 747
- 12.4.2. Dostęp do pól statycznych 751
- 12.5. Sygnatury 752
- 12.6. Wywoływanie metod języka Java 754
- 12.6.1. Wywoływanie metod obiektów 754
- 12.6.2. Wywoływanie metod statycznych 757
- 12.6.3. Konstruktory 758
- 12.6.4. Alternatywne sposoby wywoływania metod 758
- 12.7. Dostęp do elementów tablic 760
- 12.8. Obsługa błędów 764
- 12.9. Interfejs programowy wywołań języka Java 768
- 12.10. Kompletny przykład: dostęp do rejestru systemu Windows 773
- 12.10.1. Rejestr systemu Windows 773
- 12.10.2. Interfejs dostępu do rejestru na platformie Java 775
- 12.10.3. Implementacja dostępu do rejestru za pomocą metod macierzystych 776
Skorowidz 789
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-6067-9 |
Rozmiar pliku: | 10 MB |