Java-бібліотека: створення, обробка, робота з файлами

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 не має Library 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

Подібно до 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. Library Trove особливо корисна, оскільки забезпечує високошвидкісні регулярні та примітивні колекції для Java.

Javax.mail і 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.

Вона надана Дугом Крокфордом і була введена в платформу 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. writeValue - перетворює тип даних Java в JSON і в цьому випадку виводить у Writer.
  3. readValue - перетворює JSON на тип даних Java.

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

cd chapter-4/speakers-test

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

Навчальні книги 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. Ручна серіалізація або розбір можуть бути швидшими.

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