added equivalent JNI methods that take a Java-provided byte[] buffer instead of creating one from inside the JNI space (pulls binary data straight from C++ and fills the Java buffer directly)
removed inefficient synchronized keyword on ByteStream wrapper, as the critical sections granularity is defined at the application level