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

8 0 Новини високих технологій

Java є одним із стовпів світу з відкритим вихідним кодом. Кожен його проект використовує інші додатки з відкритим вихідним кодом, їх достатньо в мережі і користувачам не потрібно "винаходити велосипед". Проте часто трапляється, що розробникам для функціональності потрібна особлива Java-бібліотека (Library), і вони поняття не мають, як її створювати.

Ключові принципи дизайну

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


Java-бібліотека: створення, обробка, робота з файлами
Кілька ключових принципів хорошого дизайну Java-бібліотеки:
  • Вона повинна чітко передавати свою внутрішню структуру таким чином, що користувач знає, як її використовувати, навіть якщо не розуміє, як вона працює зсередини.
  • Інкапсуляція - жорсткість і уточнення коду інтерфейсу, що робить його більш надійним і зрозумілим.
  • Розширюваність - створення Java-бібліотеки, яка добре виконує свою задачу і надає можливість заповнити відсутні частини для задоволення потреб конкретного розробника.
  • Спадкування - забезпечує спосіб установки коду без необхідності знати всі деталі коду, який настроюється.
  • Надання способу отримання налагоджувальної інформації з коду - допомагає користувачам знаходити власні помилки.
  • Межі функціональності: вхід і вихід

    Проблема в тому, що не всі дизайнери 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-бібліотекою професіонала для веб-сканування, можна прописати наступне.
    Java-бібліотека: створення, обробка, робота з файлами
    За замовчуванням шаблони не повинні ігноруватися. Змінна indexPage - це URL-адресу, з якого має розпочатися обхід контенту, драйвер - це використовуваний браузер. За замовчуванням він нічого не може зробити, оскільки невідомо, якою встановлений браузер на працюючій машині. Вихід потрібен в основному для Library, яка спілкується із зовнішнім світом. Тут потрібно відповісти на питання, як він буде оброблятися.
    Для цього потрібно прописати щось на зразок цього: WebCrawl graph = new GraphCrawl();List pages = graph.crawl();

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

    Розробник завжди повинен використовувати інтерфейси, а користувач зобов'язаний взаємодіяти з кодом тільки через суворі контракти. Наприклад, в бібліотеці jcabi-github клас RtGithub si єдиний, який він бачить.
    Java-бібліотека: створення, обробка, робота з файлами
    Наведений вище фрагмент створює заявку в репозиторії eugenp/tutorials. Примірники Repo і Issue застосовуються, але фактичні типи ніколи не розкриваються. Сценарій, наведений вище, може бути дозволений, але тоді розроблений алгоритм буде забруднена великою кількістю стандартного коду. Інтерфейси також забезпечують простоту розширення і зворотної сумісності. З одного боку розробники зобов'язані дотримуватися вже випущені контракти, а з іншого - користувач розширює пропоновані інтерфейси: він може їх прикрашати або писати альтернативні реалізації. Хороша бібліотека - легка. Код повинен вирішити проблему і бути функціональним. Якщо потрібно багато залежностей. Ймовірно, розробник намагається охопити занадто велику кількість функцій і повинен розбити проект на кілька малих. Проект повинен бути максимально прозорим. Найкращий приклад - використовувати SLF4J з API для ведення журналу. Не варто застосовувати log4j безпосередньо, можливо, розробник захоче застосувати інші засоби ведення журналу. Підключення Java-бібліотек документів, які переходять через проект транзитивно, виконують, щоб не включалися небезпечні залежності, такі як xalan або xml-apis. У світі існує сотні тисяч бібліотек, але програмістам потрібно знання лише невеликої кількості найбільш функціональних модулів.

    Бібліотека модульного тестування

    Java-бібліотека: створення, обробка, робота з файлами
    У розробників дуже поширені модулі логів, вони потрібні в кожному проекті. Особливо важливі для серверних додатків, тому що журнали розміщуються тільки там, де можна бачити, що відбувається в них. Незважаючи на те що 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.
    Java-бібліотека: створення, обробка, робота з файлами
    Існують бібліотеки розбору 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

    Java-бібліотека: створення, обробка, робота з файлами
    Подібно до 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 і Скарб. Library Скарб особливо корисна, оскільки забезпечує високошвидкісні регулярні і примітивні колекції для Java. Javax.mail і Apache Commons Email надають API для відправки електронної пошти з Java. Він побудований поверх API JavaMail, який створений для спрощення робіт.

    Криптографічний пакет кодеків

    Java-бібліотека: створення, обробка, робота з файлами
    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-бібліотека: створення, обробка, робота з файлами
    Вона надана Дугом Крокфордом і була введена в платформу JavaEE 7 як частина ініціативи 353 «Запит специфікації Java» (JSR) і є автономною реалізацією, яку можна інтегрувати з SE, починаючи з версії 8. Дев'ята модифікація забезпечує власну підтримку JSON в рамках ініціативи Enhancement Proposal (JEP) 198. Переваги Джексона:
  • Широко використовується, особливо співтовариством Spring.
  • Забезпечує відмінну функціональність.
  • Добре працює протягом тривалого часу.
  • Добре підтримується з активним спільнотою розвитку.
  • Має хорошу документацію.
  • Підтримує фокус, дотримуючись однієї бібліотеки Java/JSON.
  • Ось найважливіші класи і методи Джексона, які сериализуют/десериализуют в JSON:
  • ObjectMapper - перетворює конструкції між Java і JSON.
  • ObjectMapper.writeValue - перетворює тип даних Java в JSON і в цьому випадку виводить у Writer.
  • ObjectMapper.readValue - перетворює JSON в тип даних Java.
  • Запускають одиночний модульний тест з командного рядка наступним чином: cd chapter-4/speakers-test +gradle test --tests org.jsonatwork.ch4.BasicJsonTypesTest+
    Java-бібліотека: створення, обробка, робота з файлами

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

    Java-бібліотека: створення, обробка, робота з файлами
    Різноманіття бібліотек примушує програмістів знаходити вичерпне, але стисле керівництво по всім функціям Java SE 9. У цьому їм допомагають книги Хорстманна, особливо цікаво починаючим користувачам десяте видання книги «Java-бібліотека професіонала». Кей С. Хорстманн - професор комп'ютерних наук з державного університету Сан-Хосе. Він є досвідченим професійним програмістом і консультантом для великих корпорацій, університетів і організацій із Java, C ++, Windows і інтернет-програмування. Хорстманн є автором багатьох успішних професійних і академічних книг, включаючи "Big C ++", "C ++ для всіх", "Big Java", "Об'єктно-орієнтований дизайн та шаблони". Книга Корнелла Хорстманн «Java-бібліотека професіонала» охоплює всі важливі аспекти мови, які повинен знати сучасний розробник, включаючи модульність, а також потужні лямбда-вирази, які представлені у 8-й версії. В них викладено основи програмування з використанням Java в більш доступній і менш строгому підході. Книга надає більш зручний інтенсивний графічний дизайн, який передає складні концепції просто і ефективно. Вона відрізняється від інших книг на ринку тим, що фокусується на таких темах, як цикли і графічні інтерфейси, при цьому уникаючи орієнтації на об'єктну орієнтацію. Акцент робиться на прості програми, які використовують попередньо створені структури даних і алгоритми. У прикладах і тематичних дослідженнях розглядаються практичні додатки, які можуть виявитися корисними програмістам, вченим і інженерам, наприклад, обробка табличних даних, збір інформації в інтернеті, графічні бібліотеки Java для створення графічних зображень і інтерфейсів.

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

    Java-бібліотека: створення, обробка, робота з файлами
    З JSON легко працювати і він став стандартним форматом даних практично для всього. У Stackify широко застосовують JSON для API-інтерфейсів REST, серіалізації повідомлень в черзі і багато чого іншого. Деякі загальні поради по продуктивності JSON:
  • Використовувати декілька бібліотек JSON для оптимальної продуктивності і функцій.
  • Використовувати потоки, коли це можливо.
  • Стискати користувальницький JSON. Оскільки це просто текст, можна розраховувати на стиск до 90%. Тому застосовують «zip» скрізь, де це можливо.
  • Уникати аналізу, якщо це не потрібно.
  • Виконувати серіалізацію/десеріалізацію великих і менших об'єктів JSON. У деяких випадках, коли потрібно отримати масив великих об'єктів, його розбивають на дрібніші частини.
  • Налаштувати аналізатор JSON Web API.
  • Не сериализации всі поля, нульові значення або значення за замовчуванням.
  • Використовувати коротші імена полів.
  • Ручна серіалізація або розбір можуть бути швидше.
  • Додатки насправді є звичайними комп'ютерними програмами, що працюють на багатьох пристроях реального світу. Вони мають особливу можливість доступу до датчиків і апаратних засобів управління. Для цього виробники надають так звані бібліотеки програмування, які дозволяють відносно легко використовувати апаратне забезпечення у розробленій програмі.