Transactions are encoded based on the Contract ABI Specification. It is hard to get through, but these docs have all the answers to your question.
The transaction in question is passing in two parameters: a dynamic string (name) and a static bool (isFirst). When encoding the parameters, the EVM looks to see if the parameters are static or dynamic.
131 can't be encoded as just 0x83. From https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP:
For a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
0x83 is outside of that range, so this "self encoding" can't be used.
Otherwise, if a string is 0-55 bytes long, the RLP encoding consists of a single byte with ...
When you perform a call like contract.set(0x10, ....), this is encoded into a payload like "0x60fe47b10000000000000000000000000000000000000000000000000000000000000010". Where "0x60fe47b1" is the keccak256 encoded value of the method signature, and the rest of the data is the passed parameters (I can't recall atm how the parameters are encoded).
So, when you ...
I guess you are trying to decode erc20 transfer method.
You must use the object org.web3j.abi.datatypes.Address rather than String.class.
final Address address = (Address) refMethod.invoke( null, to, 0, Address.class);
and address.toString() is the real recipient of the ERC20 transaction.