well I'm not sure but this statement might be causing problems
int size=fin.available();
I read the documentation of the available method which is not very clear for me but this might be it
Returns an estimate of the number of remaining bytes that can be read (or skipped over) from this input stream without blocking by the next invocation of a method for this input stream. The next invocation might be the same thread or another thread. A single read or skip of this many bytes will not block, but may read or skip fewer bytes.
In some cases, a non-blocking read (or skip) may appear to be blocked when it is merely slow, for example when reading large files over slow networks.
I don't know what exactly this means but there might be a case that because of this you are getting only the first 100 bytes...