fix read(byte[] b, int off, int len)  method in FileInStream.java.

Method read(byte[] b, int off, int len) returns 0 when there is nothing left to read. It should return -1.
When "mCurrentPosition" is equal to "FILE_LENGTH" the while loop is skipped and "tLen" has the same value as "len", and this means that the return value will be always 0 when there is nothing left to read. This will cause an infinite loop.
The issue exists in all branches. I've made the fix and pull request here because I'm working with the release version for 5.0, but all the branches should get the fix.
I've checked master and your solution it's already there.

   if (b == null) {
      throw new NullPointerException();
    } else if (off < 0 || len < 0 || len > b.length - off) {
      throw new IndexOutOfBoundsException();
    } else if (len == 0) {
      return 0;
    } else if (mCurrentPosition >= mFileLength) {
      return -1;
    }

No need for me to make another pull request.
This can be closed also.