Facebook - konwersja

Java. Techniki zaawansowane. Wydanie XI - ebook

Wydawnictwo:
Data wydania:
25 lutego 2020
Format ebooka:
EPUB
Format EPUB
czytaj
na czytniku
czytaj
na tablecie
czytaj
na smartfonie
Jeden z najpopularniejszych formatów e-booków na świecie. Niezwykle wygodny i przyjazny czytelnikom - w przeciwieństwie do formatu PDF umożliwia skalowanie czcionki, dzięki czemu możliwe jest dopasowanie jej wielkości do kroju i rozmiarów ekranu. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
, PDF
Format PDF
czytaj
na laptopie
czytaj
na tablecie
Format e-booków, który możesz odczytywać na tablecie oraz laptopie. Pliki PDF są odczytywane również przez czytniki i smartfony, jednakze względu na komfort czytania i brak możliwości skalowania czcionki, czytanie plików PDF na tych urządzeniach może być męczące dla oczu. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
, MOBI
Format MOBI
czytaj
na czytniku
czytaj
na tablecie
czytaj
na smartfonie
Jeden z najczęściej wybieranych formatów wśród czytelników e-booków. Możesz go odczytać na czytniku Kindle oraz na smartfonach i tabletach po zainstalowaniu specjalnej aplikacji. Więcej informacji znajdziesz w dziale Pomoc.
Multiformat
E-booki w Virtualo.pl dostępne są w opcji multiformatu. Oznacza to, że po dokonaniu zakupu, e-book pojawi się na Twoim koncie we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu.
(3w1)
Multiformat
E-booki sprzedawane w księgarni Virtualo.pl dostępne są w opcji multiformatu - kupujesz treść, nie format. Po dodaniu e-booka do koszyka i dokonaniu płatności, e-book pojawi się na Twoim koncie w Mojej Bibliotece we wszystkich formatach dostępnych aktualnie dla danego tytułu. Informacja o dostępności poszczególnych formatów znajduje się na karcie produktu przy okładce. Uwaga: audiobooki nie są objęte opcją multiformatu.
czytaj
na laptopie
Pliki PDF zabezpieczone watermarkiem możesz odczytać na dowolnym laptopie po zainstalowaniu czytnika dokumentów PDF. Najpowszechniejszym programem, który umożliwi odczytanie pliku PDF na laptopie, jest Adobe Reader. W zależności od potrzeb, możesz zainstalować również inny program - e-booki PDF pod względem sposobu odczytywania nie różnią niczym od powszechnie stosowanych dokumentów PDF, które odczytujemy każdego dnia.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na tablecie
Aby odczytywać e-booki na swoim tablecie musisz zainstalować specjalną aplikację. W zależności od formatu e-booka oraz systemu operacyjnego, który jest zainstalowany na Twoim urządzeniu może to być np. Bluefire dla EPUBa lub aplikacja Kindle dla formatu MOBI.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na czytniku
Czytanie na e-czytniku z ekranem e-ink jest bardzo wygodne i nie męczy wzroku. Pliki przystosowane do odczytywania na czytnikach to przede wszystkim EPUB (ten format możesz odczytać m.in. na czytnikach PocketBook) i MOBI (ten fromat możesz odczytać m.in. na czytnikach Kindle).
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na smartfonie
Aby odczytywać e-booki na swoim smartfonie musisz zainstalować specjalną aplikację. W zależności od formatu e-booka oraz systemu operacyjnego, który jest zainstalowany na Twoim urządzeniu może to być np. iBooks dla EPUBa lub aplikacja Kindle dla formatu MOBI.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
149,00

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
Watermark
Watermarkowanie polega na znakowaniu plików wewnątrz treści, dzięki czemu możliwe jest rozpoznanie unikatowej licencji transakcyjnej Użytkownika. E-książki zabezpieczone watermarkiem można odczytywać na wszystkich urządzeniach odtwarzających wybrany format (czytniki, tablety, smartfony). Nie ma również ograniczeń liczby licencji oraz istnieje możliwość swobodnego przenoszenia plików między urządzeniami. Pliki z watermarkiem są kompatybilne z popularnymi programami do odczytywania ebooków, jak np. Calibre oraz aplikacjami na urządzenia mobilne na takie platformy jak iOS oraz Android.
ISBN: 978-83-283-6067-9
Rozmiar pliku: 10 MB

BESTSELLERY

Kategorie: