Techniki Zaawansowane
8 godz. 35 min · Java · Full-stack i Programowanie
Rafał SolarskiW poczatkowych lekcjach przyjrzymy sie pokladowi, na jakim bedziemy uruchamiali nasze programy. Wykorzystamy VisualVM do podgladania parametrów JVM. Zobaczymy równiez jakie zasoby sa tam dostepne oraz dowiesz sie jak monitorowac to, czy dobrze z nich korzystamy. Opowiemy Ci tez miedzy innymi o tym, jak zrobic heap i thread dump, oraz jak wlaczyc logi GC.
Kolejne lekcje kursu zostaly poswiecone wyrazeniom regularnym. Wyrazenia regularne mozemy wykorzystac nie tylko do walidacji danych wprowadzania przez uzytkownika, ale równiez do dzielenia tekstu oraz wyluskiwania wystapien wzorców w duzym tekscie. W tym rozdziale dowiemy sie miedzy innymi tego, jak mozemy wykorzystac ten potencjal z poziomu Javy.
Dzieki typom generycznym jestesmy w stanie osiagnac bezpieczenstwo typów w trakcie kompilacji przy zachowaniu elastycznosci pisanego kodu. W nastepnym rozdziale kursu przyjrzymy sie temu, jak mozemy je wykorzystac, oraz w jaki sposób czasami nalezy z tego bezpieczenstwa zrezygnowac.
Interfejsy funkcyjne to sposób na przeniesienie odrobiny swiata programowania funkcyjnego do Javy. Gdy polaczymy je z wyrazeniami lambda oraz API strumieni pozwola nam pisac te sama logike w duzo bardziej przejrzysty sposób.
Kolekcje, czyli listy, mapy, zbiory i kolejki to jedne z najczesciej wykorzystywanych klas w codziennej pracy. To jak dobrze poznamy ich mozliwosci ma ogromny wplyw na to, w jaki sposób bedziemy podchodzili do rozwiazywania wyzwan na naszej drodze.
System plików to zasób bez którego ciezko sobie poradzic. Pozwalaja nam na dostarczanie konfiguracji, danych wejsciowych i wyjsciowych, a przez to równiez integrowanie ze soba calych systemów.W tym rozdziale nauczymy sie korzystac z tych dobrodziejstw w bezpieczny sposób wykorzystujac m.in. IO Streams.
Trzymanie daty w String to niekoniecznie najwygodniejszy sposób. Juz od pewnego czasu Java dysponuje bardzo wygodnym Date&Time API - zobaczymy, co mozemy w nim znalezc.
Wielowatkowosc nie jest prosta... i dlugo tak jeszcze pozostanie. Nawet jesli korzystamy z frameworków, które próbuja ja przed nami ukryc, to ciagle musimy byc swiadomi problemów jakie sie z nia wiaza. W tym rozdziale poznamy glówne problemy na jakie mozna natrafic programujac wielowatkowo w Javie. Poznamy równiez klasy, które zdecydowanie pomoga nam zapanowac nad ta zlozonoscia.
JDBC to najbardziej podstawowy sposób laczenia sie z baza SQL z poziomu Javy. W wielu systemach/aplikacjach stosuje sie rozwiazania ORM takie jak JPA/Hibernate. Mimo wszystko warto wiedziec jak to pod spodem dziala oraz umiec poradzic sobie w aplikacjach, gdzie wybrano bardziej "lekkie" podejscie niz Hibernate.
Na koniec kursu wykorzystamy zdobyta wiedze, aby stworzyc prosta aplikacje pozwalajaca na przechowywanie danych o wydatkach. Po stworzeniu coreu aplikacji, mozesz spróbowac uzupelnic go za pomoca GUI.
Ten kurs stworzony zostal przede wszystkim z mysla o osobach, które juz poznaly podstawy jezyka, takie jak zmienne, mechanizmy kontroli wykonania, klasy, typy generyczne.Jezeli chcesz poczuc sie swobodnie nie tylko jesli chodzi o mechanizmy jezyka, ale równiez pod wzgledem znajomosci standardowej biblioteki Javy - to kurs w sam raz dla Ciebie. Materialy beda przydatne dla studentów, którzy znaja juz podstawowa skladnie Javy; programistów Javy chcacych poszerzyc lub uporzadkowac swoja wiedze; programistów innych jezyków, którzy chca poznac inny stack technologiczny.
Potrafimy już czytać tekst oraz bajty z pliku teraz
aby zapisać jakiś tekst do pliku wykorzystamy file writera
a w przypadku gdyby to były dane binarne to po prostu file output
stream konstruowanie takiego fil writera wygląda identycznie jak w przypadku
readerów czy input streamów podajemy dalej nazwę
tutaj prawda pliku i też wykorzytujemy try with resources tak
tę składnię okej tutaj jak sobie zobaczymy file writer daje
nam metodę write między innymi metodę stringa która przyjmuje stringa
jako parametr więc wypiszmy tutaj coś okej odpalmy ten program jak
widzimy tekst pojawił się w naszym pliku teraz załóżmy że chcemy sobie przypisać
zawartość pliku lorem to naszego nowego pliku tak więc
po prostu wywołujemy to w pętli tak samo jak czytaliśmy cały
plik w celu jego wyprintowania aby jednocześnie czytać i zapisywać
do kolejnego pliku powinienem mieć w jednym momencie dostępny file reader i file writer
w tym celu utworzymy sobie file readera i dzięki temu że wewnątrz
tego try with resources można otwierać kilka obiektów na raz tutaj
wystarczy to podzielić średnikiem to nie muszę dodatkowego zagnieżdżania
try'ów robić w tym momencie tak to powinno wyglądać przepisuje tutaj znak
po znaku zawartość pieszego pliku do pliku output możemy sobie zobaczyć
jak wygląda teraz ten plik tak teraz po prostu to samo co było w lorem teraz
w celu zwiększenia wydajności programu powinniśmy dodać jeszcze buforowanie w tym celu
zastosujemy odpowiednio buffered reader i buffered writer tak
to może wyglądać tutaj ten try staje się trochę nieczytelny z tego względu że otwieramy
cztery elementy wewnętrz niego możemy zastąpić otwarcie file
readera następnie zapakowanie go do buffered readera wykorzystując
metody w klasie pomocniczej files tak to powinno wyglądać tutaj
wykorzystujemy metodę new bufferedreader oraz new buffered writer
które po prostu robią pod spodem dokładnie to samo czyli otwierają odpowiedni strumień
z bądź do pliku oraz opakowują go bufferedreadera
bądź writera tutaj metoda new bufferedreader przyjmuje path jako
parametr tak path to jest pewna abstrakcja taki interfejs który pozwala
wskazywać w bezpieczny sposób właśnie ścieżki do pliku tutaj jeżeli
używamy tej tego interfejsu wykorzystujemy też metodę fabrykująca get
na klasie pomocnej w której po prostu podajemy ścieżkę do tego pliku
i tutaj ona jest rozbita na poszczególne jej elementy tak czyli
jeżeli mamy files wcześniej było slash lorem txt
to teraz po prostu podajemy to oddzielnie tak tutaj jeśli mamy pewność
odnośnie tego jakie są dane jakiej długości są linie to
możemy dzięki temu że wykorzystujemy buffered reader możemy czytać od razu po całej
linii i przepisywać ją do kolejnego pliku wtedy wygląda to
trochę może bardziej ładnie tak i też jeżeli chcemy
możemy od razu na całej linii w tym momencie robić jakiegoś na przykład regex'a
i coś wyciągać z niego w założeniu że nasze linie
tutaj nie będą zbyt długie nasz program jest bezpieczny tak niezależnie
od tego jakiej wielkości są te pliki wejściowe tak które
są czytane przez reader'a dane na naszym heap'ie są w tym momencie ograniczone
przez rozmiar bufora zakładając że linia po prostu nie jest jakaś kolosalna tak
ogromna ale jeżeli tego się też boimy to możemy to zamienić
na read'a tak i tutaj czytać jakiś array lub czytać po prostu
po jednym znaku ponieważ nie będzie miało to dużego wpływu na wydajność ponieważ
i tak używamy buforowania tutaj w tych klasach ze
względu na to że tylko przepisujemy dane z jednego pliku do drugiego w
ogóle nas nie interesuje to w jakim kodowaniu jest plik wejściowy i wyjściowy
również nie interesuje nas sam tekst jego znaczenie tak
z tego względu możemy też wykorzystać klasy strumieni w
wersji binarnej będzie wyglądało to w ten sposób tutaj ze względu na to że nie
istnieją metody fabrykujące stworzenie
buffered file stream to musiałem tutaj po prostu rozdzielić
tak jak na początku tak teraz zauważ że jeżeli dodamy coś do naszego
pliku wyjściowego w tym są jakieś nasze dane tak powiedzmy
dodamy tutaj coś i uruchomił nasz program to dane w tym pliku wyjściowym
są nadpisywane dzieje się tak z tego względu że dane w tym pliku są
najpierw trimowane a później dopiero zostaje on uzupełniany tekstem
tak tymi bajkami które przypisujemy możemy sprawić aby dane
były dopisywane do końca pliku poprzez ustawienie flagi
append na true w file output stream w przypadku tekstowych strumieni
po prostu by było to w file writer okej w tym momencie jeżeli uruchomimy
nasz program jeszcze raz to tekst w output txt będzie po prostu podwojony
tak to wszystko co chciałem ci pokazać w tej lekcji dzięki wielkie i do zobaczenia