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 = new RtGithub("username", "password");
  • Github oauth = new RtGithub("token").

Як другий приклад, як працювати з charles, Java-бібліотекою професіонала для веб-сканування, можна прописати наступне.

Сканування бібліотеки

За замовчуванням шаблони не слід ігнорувати. Змінна indexPage-це URL-адреса, з якої слід почати обхід вмісту, драйвер-Це браузер, який використовується. За замовчуванням він нічого не може зробити, оскільки невідомо, який браузер встановлений на працюючій машині. Вихід потрібен в основному для Library, яка спілкується із зовнішнім світом. Тут потрібно відповісти на питання, як він буде оброблятися.

Для цього потрібно прописати щось подібне:

WebCrawl graph = new GraphCrawl(...);List pages = graph.crawl();

Інтерфейс і треті особи

Розробник завжди повинен використовувати інтерфейси, а користувач зобов`язаний взаємодіяти з кодом тільки через суворі контракти. Наприклад, у бібліотеці 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 корисно ознайомитися з Google Guava та бібліотекою Apache Commons.

Платформа з підтримкою HTTP

Багатьом розробникам не подобається в JDK відсутність підтримки HTTP. Можна встановити З`ЄДНАННЯ 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.

Якщо програміст пише каркас, який генерує код або взаємодіє з байт-кодами, то йому потрібна бібліотека байт-кодів. Вона дозволяє читати і змінювати байт-код, згенерований додатком. Деякі з популярних Library байт-це javassist і Cglib Nodep. Помічник програмування Java робить маніпулювання байт-кодом дуже простим. ASM-ще один корисний модуль для його редагування.

Повсюдний формат PDF

Повсюдний формат PDF

Подібно до Microsoft Excel, бібліотеки PDF є ще одним повсюдним форматом. Якщо необхідно підтримувати функціональність PDF в додатку, наприклад, експортувати дані в файли PDF, то можна застосувати модулі iText і Apache FOP. Обидва надають корисну функціональність, пов`язану з PDF, але iText краще.

До Java 8 модулі даних та часу JDK мали недоліки, оскільки вони не були потоково-орієнтованими та помилковими. Розробники Java покладалися на JodaTime для реалізації вимог до дати та часу. У JDK 8 немає причин використовувати Joda, оскільки користувач отримує цю функціональність у новому 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 в коді, ці Library можуть реєструвати точний виклик з параметрами і з визначенням часу необхідного для виконання.

Буфери протоколів Google-це спосіб кодування структурованих даних у ефективному, але розширюваному форматі. Це багатша і краща альтернатива серіалізації Java. Деякі корисні мережеві бібліотеки-Netty та Apache MINA. Якщо розробник пише програму, в якій потрібно виконати низькорівневу мережеву задачу, то він використовує ці модулі.

Java JSON бібліотеки

Існують надійні бібліотеки JSON для серіалізації/десеріалізації. Можна знайти деталі про Джексона в репозиторії GitHub.

Java JSON бібліотеки

Вона надана Дугом Крокфордом і була введена в платформу JavaEE 7, як частина ініціативи 353 "запит специфікації Java" (JSR» і є автономною реалізацією «яку можна інтегрувати з SE, починаючи з версії 8.

Дев`ята модифікація забезпечує власну підтримку JSON в рамках ініціативи Enhancement Proposal (JEP) 198.

Переваги Джексона:

  1. Широко використовується, особливо спільнотою Spring.
  2. Забезпечує відмінну функціональність.
  3. Добре працює протягом тривалого часу.
  4. Добре підтримується з активним співтовариством розвитку.
  5. Має хорошу документацію.
  6. Підтримує фокус, дотримуючись однієї бібліотеки Java / JSON.

Ось найважливіші класи та методи Джексона, які серіалізують / десеріалізують у JSON:

  1. ObjectMapper-перетворює конструкції між Java та JSON.
  2. ObjectMapper.writeValue-перетворює тип даних Java у JSON і в цьому випадку виводить у Writer.
  3. ObjectMapper.readValue-перетворює JSON у тип даних Java.

Запускають Одиночний модульний тест з командного рядка наступним чином:

cd chapter-4/speakers-test

+gradle test --tests org.jsonatwork.ch4.BasicJsonTypesTest+

Одиночний модульний тест

Навчальні книги Horstmann

Навчальні книги Horstmann

Різноманіття бібліотек змушує програмістів знаходити вичерпне, але Стисле керівництво по всім новим функціям Java SE 9. У цьому їм допомагають книги Хорстманна, особливо цікаво початківцям користувачам десяте видання книги " Java-бібліотека професіонала».

Кей З. Хорстманн-професор комп`ютерних наук державного університету Сан-Хосе. Він є досвідченим професійним програмістом і консультантом для великих корпорацій, університетів і організацій по Java, C ++, Windows і інтернет-програмування. Хорстманн є автором багатьох успішних професійних та академічних книг, включаючи "Big C ++", "C ++ для всіх", "Big Java", "Об`єктно-орієнтований дизайн та шаблони".

Книга Корнелла Хорстмана "Java-бібліотека професіонала" охоплює всі важливі аспекти мови, які повинен знати сучасний Розробник, включаючи модульність, а також потужні лямбда-вирази, представлені у 8-й версії. У них викладені основи програмування з використанням Java в більш доступному і менш суворому підході.

Книга надає більш зручний інтенсивний Графічний дизайн, який передає складні концепції просто і ефективно. Він відрізняється від інших книг на ринку тим, що фокусується на таких темах, як цикли та графічні інтерфейси, уникаючи при цьому орієнтації на об`єкт. Акцент робиться на прості програми, які використовують попередньо створені структури даних і алгоритми.

У прикладах та тематичних дослідженнях розглядаються практичні програми, які можуть виявитися корисними для програмістів, науковців та інженерів, наприклад, обробка табличних даних, збір інформації в Інтернеті, графічні бібліотеки Java для створення користувацьких графічних зображень та інтерфейсів.

Способи поліпшення продуктивності Library

Способи поліпшення продуктивності

JSON легко працювати і став стандартним форматом даних майже для всього. У Stackify широко застосовують JSON для API-інтерфейсів REST, серіалізації повідомлень в черзі і багато чого іншого.

Деякі загальні поради щодо продуктивності JSON:

  1. Використовуйте кілька бібліотек JSON для оптимальної продуктивності та функцій.
  2. Використовуйте потоки, коли це можливо.
  3. Стискати користувальницький JSON. Оскільки це просто текст, можна розраховувати на стиснення до 90%. Тому застосовують " zip " скрізь, де це можливо.
  4. Уникати аналізу, якщо це не потрібно.
  5. Виконувати серіалізацію / десеріалізацію більших і менших об`єктів JSON. У деяких випадках, коли потрібно отримати масив великих об`єктів, його розбивають на більш дрібні частини.
  6. Налаштувати аналізатор JSON Web API.
  7. Не серіалізувати всі поля, нульові значення або значення за замовчуванням.
  8. Використовуйте коротші назви полів.
  9. Ручна серіалізація або розбір можуть бути швидшими.

Додатки насправді є звичайними комп`ютерними програмами, що працюють на багатьох пристроях реального світу. Вони мають особливу можливість доступу до датчиків і апаратних засобів управління. Для цього виробники надають так звані бібліотеки програмування, які дозволяють відносно легко використовувати апаратне забезпечення в розробленій програмі.

Статті на тему