msgpack/msgpack-java — pull request #100 by xerial (2014-05-23 05:42:03+00:00)
Title: V07 unpacker

Implemented MessageUnpacker whose performance is faster than v06. You can run benchmark tests that compares the performance of v06 and v07:
```
$ ./sbt test
```
benchmark code: https://github.com/msgpack/msgpack-java/blob/v07-unpacker/msgpack-core/src/test/scala/org/msgpack/core/MessageUnpackerTest.scala

When reading 10,000 message-packed records (including arrays, maps, strings, etc.), skipping records is 4 times faster than v6, and reading values is about 2 times faster:
![1__leo_weaver_local___work_git_msgpack-java__java_](https://cloud.githubusercontent.com/assets/57538/3063250/1378662c-e238-11e3-977d-05f24d4bb730.png)

Summary of the changes:
* To simplify the implementation `MessageUnpacker.unpackXXX` methods block until the next input buffer is available. Supporting event-driven I/O #92 is not included in this change.
* At the boundary of `MessageBuffer`s, the unpacker copies the contents of the current buffer and the next buffers into an extra buffer so that getXXX can read its required length. (see `ensure()` in `MessageUnpacker`)
* Added README file
* `skipValue()` uses switch-case statements instead of polymorphic function calls in `MessageFormat` because using switch statement is slightly faster. The skip length table #94 is not yet implemented because this part is already fast enough.
* Implemented `packString` and `unpackString` that use pre-allocated buffers to encode/decode UTF-8 strings.
* Added MessagePack.Config object to specify the behaviour of packer and unpacker. For example, options for handling malformed UTF-8 strings, making RAW/STRING headers compatible, string coder buffer size, etc.
* Added [property-based tests](http://www.scalatest.org/user_guide/property_based_testing) that check the behaviour of packer/unpacker for randomly generated inputs. (See MessagePackerTest.scala)
* Added benchmark tests. It runs a code block 10 times (for warm-up), then measures the performance.
* Fixed several pack/unpack bugs when reading array/map/extended type headers.
* Enabled code coverage report via `./sbt jacoco:cover` http://www.eclemma.org/jacoco/
* Enabled findbugs report via `./sbt findbugs` http://findbugs.sourceforge.net/

TODO
* Returning rawString references in unpacker (requires dedicated memory management)
* Event-driven I/O for implementing RPC service #92
* Value/Cursor for traversing message-packed values.