Essentials are a collection of general-purpose classes we found useful in many occasions.
- Write less code in your projects
- Specialized implementations for better performance compared to standard APIs
- Super light weight: < 100k in size
- Compatible with Android and Java
This project is bare bones compared to a rich menu offered by Guava or Apache Commons. Essentials is not a framework, it's rather a small set of utilities to make Java standard approaches more convenient or more efficient.
- IO utilities help with streams (byte and character based) and digests (e.g. MD5 and SHA-1).
- File utilities simplify reading and writing strings/bytes/objects from or to files. Also includes getting hashes from files and copying files.
- String utilities allow efficient splitting and joining of strings, hex and MD5 creation, and other useful string helpers.
- Date utilities.
- Better hash functions: our Murmur3 implementation provides superior hash quality and outperforms standard Java hash functions
- Specialized Streams: for example an optimized PipedOutputStream replacement (based on a circular byte buffer)
- Hash set and map for primitive long keys outperform the generic versions of the Java Collection APIs
- Multimaps provide a map of lists or sets to simplify storing multiple values for a single key
- Object cache with powerful configuration options: soft/weak/strong references, maximum size, and time-based expiration
- Base64 implementation (bundled from iharder.net) for lower versions of Java & Android (includes input/output streams)
Read more on our website.
Add the dependency to your project
You may also try the 3.0 release candidate with additional features and a cleaned up API:
Or, grab the older version:
And for Maven:
<dependency> <groupId>de.greenrobot</groupId> <artifactId>java-common</artifactId> <version>2.3.1</version> </dependency>
Code samples (V2.3.1)
Example code on how to use some of the utility classes:
// Get all bytes from stream and close the stream safely byte bytes = IoUtils.readAllBytesAndClose(inputStream); // Read the contents of an file as a string (use readBytes to get byte) String contents = FileUtils.readUtf8(file); // How many days until new year's eve? long time2 = DateUtils.getTimeForDay(2015, 12, 31); int daysToNewYear = DateUtils.getDayDifference(time, time2);
Multimaps (added in V2.2):
ListMap<String,String> multimap = new ListMap<>(); multimap.putElement("a", "1"); multimap.putElement("a", "2"); multimap.putElement("a", "3"); List<String> strings = multimap.get("a"); // Contains "1", "2", and "3"
Murmur3A murmur = new Murmur3A(); murmur.update(bytes); long hash = murmur.getValue();
All hashes can be calculated progressively by calling update(...) multiple times. Our Murmur3A implementation goes a step further by offering updates with primitive data in a very efficient way:
// reuse the previous instance and start over to calculate a new hash murmur.reset(); murmur.updateLong(42L); // Varargs and arrays are supported natively, too murmur.updateInt(2014, 2015, 2016); murmur.updateUtf8("And strings, of course"); // Hash for the previous update calls. No conversion to byte necessary. hash = murmur.getValue();
The utility classes are straight forward and don't have dependencies, so you should be fine to grasp them by having a look at their source code. Most of the method names should be self-explaining, and often you'll find JavaDocs where needed.
Currently, Maven is used to build greenrobot-common. Inside of build-common, there are two parent POMs defined that might be useful: parent-pom and parent-pom-with-checks. The latter integrates FindBugs and Checkstyle in your build. Use it like this:
<parent> <groupId>de.greenrobot</groupId> <artifactId>parent-pom-with-checks</artifactId> <version>2.0.0</version> <relativePath></relativePath> </parent>
Copyright (C) 2012-2016 Markus Junginger, greenrobot (http://greenrobot.org)
EventBus binaries and source code can be used according to the Apache License, Version 2.0.
More Open Source by greenrobot
EventBus is a central publish/subscribe bus for Android with optional delivery threads, priorities, and sticky events. A great tool to decouple components (e.g. Activities, Fragments, logic components) from each other.
greenDAO is an ORM optimized for Android: it maps database tables to Java objects and uses code generation for optimal speed.
Follow us on Google+ to stay up to date.