Библиотека java: създаване, обработка, работа с файлове

Java е един от стълбовете на света на отворения код. Всеки от нейните проекти използва други приложения с отворен код, които са достатъчно разпространени в мрежата и не са необходими на потребителите "преоткриване на колелото". Въпреки това често се случва разработчиците да се нуждаят от конкретна библиотека на Java (Library), а да нямат представа как да я създадат.

Основни принципи на проектиране

Повторното използване на кода е един от свещените граали на компютърното програмиране. Писането на код, който може лесно да се използва повторно, изисква сложни умения, но със сигурност е нещо, което всеки може да овладее. Езикът Java може да помогне за създаването на добра платформа за многократна употреба. Това изисква разработчикът да има основни познания по програмиране, включително способността да създава, компилира и изпълнява прости програми от командния ред.

Няколко основни принципа

Няколко ключови принципа на доброто проектиране на Java библиотеки:

  1. Той трябва ясно да съобщава за вътрешната си структура по такъв начин, че потребителят да знае как да го използва, дори и да не разбира как работи вътрешно.
  2. Капсулиране - затягане и усъвършенстване на интерфейса на кода, за да стане той по-стабилен и разбираем.
  3. Разширяемост - създаване на библиотека на Java, която изпълнява добре предназначението си и предоставя възможност за попълване на липсващите части според нуждите на конкретния разработчик.
  4. Наследяване - предоставя Начин на създаване на системата код, без да е необходимо да познавате всички детайли на кода, който може да се персонализира.
  5. Осигуряване на начин за получаване на информация за отстраняване на грешки от кода - помага на потребителите да открият собствените си грешки.

Граници на функционалността: вход и изход

Проблемът е, че не всички дизайнери на Java библиотеки мислят за своите потребители, за това как API ще се използва на практика и как ще изглежда и ще се тества кодът.

Границите на функционалността вероятно са най-важната тема. Добра практика е всички зависимости да се предават чрез конструктори и те да са кратки, с няколко параметъра. Ако имате нужда от конструктор с повече от три или четири параметъра, тогава е ясно, че кодът трябва да се реорганизира.

Освен това разработчиците винаги трябва да предлагат на потребителите повече от един конструктор. Клиентите трябва да работят със String и Integer, за да могат да предават ByteArrayInputStream при тестване на модули.

Например, няколко начина Създаване на входна точка за API на Github с помощта на jcabi-github:

  • Github noauth = new RtGithub();
  • Github basicauth = нов RtGithub("потребителско име", "парола");
  • Github oauth = нов RtGithub("жетон").

Като втори пример за работа с charles, библиотеката на Java за уеб сканиране, можем да напишем.

Сканиране на библиотеката

Шаблоните не трябва да се игнорират по подразбиране. Променливата indexPage е URL адресът, от който трябва да започне обхождането на съдържанието, а драйверът е използваният браузър. Не може да направи нищо по подразбиране, тъй като не е известно какъв браузър е инсталиран на работещата машина. Изходът трябва да бъде в главно за Библиотека, която комуникира с външния свят. Въпросът тук е как ще се процедира с него.

За да направите това, трябва да изпишете нещо подобно:

WebCrawl graph = нов GraphCrawl(...);Списък със страници = graph.обхождане();

Интерфейс и трети страни

Разработчикът винаги трябва да използва интерфейси, а потребителят да взаимодейства с кода само чрез строги договори. Например в библиотеката jcabi-github класът RtGithub si е единственият, който се вижда.

Интерфейс и трети страни

Горният фрагмент създава приложение в хранилището eugenp/tutorials. Прилагат се екземпляри на Repo и Issue, но действителните типове никога не се разкриват. Горният сценарий може да бъде разрешен, но тогава разработеният алгоритъм ще бъде замърсен с много стандартен код.

Интерфейсите също така осигуряват лесно разширяване и обратна съвместимост. С от една страна Разработчиците трябва да се съобразяват с вече сключените договори, а от друга страна, потребителят разширява предлаганите интерфейси: може да ги украсява или да пише алтернативни имплементации.

Добрата библиотека е лека. Кодът трябва да решава проблема и да е функционален. Ако имате нужда от много зависимости. Вероятно разработчикът се опитва да обхване твърде много функции и трябва да раздели проекта на няколко по-малки.

Проектът трябва да бъде възможно най-прозрачен. Най-добрият пример е използването на SLF4J с API за регистриране. Не използвайте директно log4j, разработчикът може да иска да използва други инструменти за регистриране.

Свързване на библиотеките за Java документи, които преминават през проекта, по транзитивен начин, така че да не се включват опасни зависимости, като xalan или xml-apis.

Съществуват стотици хиляди библиотеки, но програмистите трябва да познават само малък брой от най-функционалните модули.

Модулна библиотека за тестване

Модулна библиотека за тестване

Входните модули са много разпространени сред разработчиците, необходими са във всеки проект. Особено важно за приложенията от страна на сървъра, тъй като дневниците се поставят само там, където можете да видите какво се случва в тях. Въпреки че JDK идва със собствена библиотека за регистриране, има по-добри алтернативи като Log4j, SLF4j и LogBack. Разработчикът на Java трябва да е запознат с предимствата и недостатъците на библиотеките за регистри и да знае защо използването на SLF4j е по-добро от използването на обикновения Log4j.

В днешния свят на уеб и IoT JSON се превърна в преходен протокол за прехвърляне на информация от клиента към сървъра. Той замени XML като предпочитан метод за предаване на информация независимо от платформата. За съжаление JDK не разполага с библиотека JSON. Но има много добри модули на трети страни, които ви позволяват да анализирате и създавате съобщения, напр. Уеб разработчикът трябва да е запознат с поне една от тези библиотеки.

Тестването на единици е най-важната характеристика, която отличава средния разработчик от професионалиста. На програмистите често им е простено, че не пишат тестове за единици, и най-често срещаните Оправданието за липсата на такова тестване е липсата на опит и познания за популярните библиотеки за тестване на единици, включително JUnit, Mockito и PowerMock.

За разработчиците на Java има няколко добри библиотеки с общо предназначение от трети страни, като Apache Commons и Google Guava. Те опростяват много задачи. Както Джошуа Блох правилно казва в "Ефективна Java", няма смисъл да се изобретява колелото; по-добре е да се използват изпитани модули, отколкото да се пишат собствени подпрограми. Разработчикът на Java е добре да се запознае с Google Guava и библиотеката Apache Commons.

Платформа с поддръжка на HTTP

Много разработчици не харесват липсата на поддръжка на HTTP в JDK. Можете да настроите HTTP връзка с помощта на класове в Java.net пакет от библиотеки с отворен код на трети страни, като например Apache HttpClient и HttpCore.

Въпреки че JDK 9 въвежда поддръжка за HTTP 2.0 и подобрена поддръжка на HTTP, експертите препоръчват на разработчиците да се запознаят с популярни библиотеки за HTTP клиенти, включително HttpClient и HttpCore.

Съществуват библиотеки за парсване

Съществуват библиотеки за анализ на XML, включително Xerces, JAXB, JAXP, Dom4j и Xstream. Xerces2 е новото поколение високопроизводителни, напълно съвместими XML парсери от семейството на Apache Xerces. Новата версия на Xerces въвежда собствен интерфейс на Xerces (XNI), пълен платформа за създаване на компоненти и конфигуриране на парсера, който е изключително модулен и лесен за програмиране.

Парсерът Apache Xerces2 е референтна реализация на XNI, но други компоненти на конфигурацията могат да бъдат написани, като се използва собственият интерфейс на Xerces. Dom4j е друга гъвкава XML рамка за създаване на Java библиотека.

Програмите от реалния свят трябва да взаимодействат с Microsoft Office под една или друга форма. Много от тях трябва да предоставят функционалност за експортиране на данни в Excel, а ако това трябва да се направи от Java приложение, е необходим API на Apache POI. Това е много богата библиотека, която ви позволява да четете и записвате XLS файлове от Java програма.

Ако програмистът пише рамка, която генерира код или взаимодейства с байткодове, той се нуждае от библиотека за байткодове. Позволява четене и модифициране на байткода, генериран от приложението. Някои популярни библиотеки са javassist и Cglib Nodep. Асистентът за програмиране в Java улеснява манипулирането на байткод. ASM е друг полезен модул за редактиране.

Повсеместно разпространен формат PDF

Универсален формат PDF

Подобно на Microsoft Excel, PDF библиотеките са друг широко разпространен формат. Ако трябва да поддържате PDF функционалност в приложението, например експортиране на данни в PDF файлове, можете да използвате модулите iText и Apache FOP. И двете предоставят полезни функции, свързани с PDF, но iText е по-добър.

Преди Java 8 модулите за данни и време на JDK бяха с недостатъци, тъй като не бяха ориентирани към нишки и бяха податливи на грешки. Разработчиците на Java разчитат на JodaTime за изпълнение на изискванията за дата и час. Няма причина да се използва Joda в JDK 8, тъй като потребителят получава тези функционалности в новия API за дата и час, но за по-старите версии на Java си струва да се проучи тази библиотека.

Въпреки че JDK разполага с богата колекция, има модули на трети страни, които предоставят повече функции, като например колекциите Apache Commons, Goldman Sachs, Google и Trove. Библиотеката Trove е особено полезна, тъй като предоставя високоскоростни регулярни и примитивни колекции за Java.

Javax.и Apache Commons Email предоставя API за изпращане на имейли с Java. Той е изграден върху API на JavaMail, който е предназначен да улесни работата.

Пакет криптографски кодек

Криптографски пакет кодеци

Apache Commons съдържа прост енкодер и декодери за различни формати като Base64 и Hexadecimal. В допълнение към тези често използвани енкодери и декодери той поддържа набор от инструменти за фонетично кодиране. Библиотеките за вградени бази данни SQL, като H2, които могат да бъдат вградени в приложение на Java, са чудесни за тестване на SQL скриптове и изпълнение на тестове на единици, които се нуждаят от база данни. H2 обаче не е единствената база данни, има и Apache Derby и HSQL, от които можете да избирате.

Библиотеки за отстраняване на неизправности в JDBC за улесняване на отстраняването на грешки, напр. P6spy. Това е модул, който ви позволява лесно да прихващате данни от бази данни и да ги регистрирате, без да променяте програмния код. Можете да ги използвате, за да регистрирате SQL заявки и тяхното времетраене. Например, ако използвате PreparedStatment и CallableStatement в кода си, тези библиотеки могат да регистрират точни извиквания с параметри и времеви маркери необходими за да изпълнявате.

Google Protocol Buffers е начин за кодиране на структурирани данни в ефективен, но разширяем формат. Това е по-богата и по-добра алтернатива на сериализирането в Java. Някои полезни библиотеки за работа в мрежа са Netty и Apache MINA. Ако разработчикът пише програма, която трябва да изпълнява мрежова задача от ниско ниво, той използва тези модули.

Библиотеки Java Json

Съществуват надеждни JSON библиотеки за сериализиране/десериализиране. Подробности за Jackson можете да намерите в хранилището на GitHub.

Библиотеки Java Json

Тя е предоставена от Дъг Крокфорд и е въведена в платформата JavaEE 7 като част от инициативата Java Specification Request (JSR) 353 и представлява самостоятелна реализация, която може да бъде интегрирана в SE от версия 8.

Деветата модификация осигурява собствена поддръжка на JSON като част от инициативата "Предложение за усъвършенстване" (JEP) 198.

Предимства на Джаксън:

  1. Използва се широко, особено от общността на Spring.
  2. Осигурява отлична функционалност.
  3. Работи добре в дългосрочен план.
  4. Добре поддържана активна общност за разработка.
  5. Има добра документация.
  6. Поддържа фокус, като се придържа към една библиотека Java/JSON.

Тук са най-важните класове и методи на Jackson, които сериализират/десериализират в JSON:

  1. ObjectMapper - конвертира конструкции между Java и JSON.
  2. ObjectMapper.writeValue - преобразува данните от тип Java в JSON и след това ги извежда в Writer.
  3. ObjectMapper.readValue - преобразува JSON в тип данни Java.

Изпълнява единичен тест от командния ред, както следва:

cd глава-4/говорители-тест

+gradle test --tests org.jsonatwork.ч4.BasicJsonTypesTest+

Единично модулно изпитване

Книги за обучение на Horstmann

Книги за обучение на Horstmann

Множеството библиотеки принуждават програмистите да намерят изчерпателно, но кратко ръководство за всички нови функции на Java SE 9. Те са подпомогнати от книгите на Хорстман, особено интересни за начинаещи потребители Десето издание на библиотеката на Java за професионалисти.

C. Хорстман Професор по компютърни науки държавен университет Сан Хосе. Той е опитен професионален програмист и консултант на големи корпорации, университети и организации в областта на програмирането на Java, C++, Windows и Интернет. Хорстман е автор на много успешни професионални и академични книги, сред които "Big C ++", "C ++ за всички", "Голяма Java", "Обектно-ориентиран дизайн и шаблони".

Книгата на Корнел Хорстман "Библиотеката на Java за професионалисти" обхваща всички важни аспекти на езика, които един съвременен разработчик трябва да познава, включително модулност, както и мощните ламбда изрази, въведени във версия 8. В него са описани основите на програмирането с Java по един по-достъпен и не толкова строг подход.

Книгата предоставя по-удобен за ползване интензивен графичен дизайн, който предава сложни концепции Просто и ефикасно. Тя се различава от другите книги на пазара по това, че се фокусира върху теми като цикли и графични интерфейси, като избягва обектно-ориентирания фокус. Наблягайте на прости програми, които използват предварително създадени структури от данни и алгоритми.

Примерите и казусите обхващат практически приложения, които програмистите, учените и инженерите могат да намерят за полезни, като работа с таблични данни, събиране на информация от интернет и графични библиотеки на Java за създаване на персонализирани графики и интерфейси.

Начини за подобряване на работата

Начини за подобряване на работата

JSON е лесен за работа и се е превърнал в стандартен формат за данни за почти всичко. Stackify използва широко JSON за REST API, сериализиране на съобщения в опашка и др.

Някои общи съвети за производителността на JSON:

  1. Използване на множество JSON библиотеки за оптимална производителност и функции.
  2. Използвайте нишки, когато е възможно.
  3. Компресиране на персонализирания JSON. Тъй като това е само текст, можете да очаквате до 90% компресия. Затова прилагайте "zip" навсякъде, където е възможно.
  4. Избягвайте разбор, ако не е необходимо.
  5. Извършване на сериализация/десериализация на по-големи и по-малки JSON обекти. В някои случаи, когато трябва да получите масив от големи обекти, го разделете на по-малки части.
  6. Конфигуриране на анализатора на JSON Web API.
  7. Не сериализирайте всички полета, нулеви стойности или стойности по подразбиране.
  8. Използване на по-кратки имена на полета.
  9. Ръчното сериализиране или парсиране може да бъде по-бързо.

Приложенията всъщност са обикновени компютърни програми, които се изпълняват на много устройства в реалния свят. Те имат специална способност за достъп до сензори и хардуерни контроли. За тази цел производителите предоставят т.нар. програмни библиотеки, които позволяват сравнително лесно да се използва хардуер в разработена програма.

Статии по темата