Shouldn' t the way the callbacks access the "user data" be left up to whoever is implementing the use of the sfInputStream though?
The issue that I am running into is reimplementing this in a different language. I wanted to get things working more or less like the C++ version, and having the extra parameter for each callback means I will probably have to write some wonky looking code instead of just writing a function with the same parameters as the C++ version and then assigning the address of that to to the callback.
Now, you are a far more experienced developer than I, so far be it from me to argue with how you implement things. I'm sure you have reasons for doing things and if need be I can work around this. Just thought I would express my thoughts.