There's no reason why that code should be fast or slow. Bytes will be received at the rate they're provided by the network adapter, and using a BufferedInputStream won't help because bytes are already effectively by the network adapter.
I'm very surprised to see local upload speed of 27KB/s, I've never seen antthing that slow before.
I just did a quick test on the milton server i'm currently working on which does very complex processing of files, including chunking and SHA1 calculation, and it gave the following results: UPLOAD time=8541ms SIZE=82,954,392bytes bandwidth= 9,712,491bytes/sec
How have you tested the upload speed, was that from the client or at the server? You can get apparently slow uploads sometimes when measured from the client because of high latency of all the PROPFIND requests the client does before and after the actual upload. That should not be a factor for large files though (Eg 50Mb or more).
If you're testing with Win7 make sure you have cookie authentication enabled otherwise Windows will do every upload twice, first without credentials then again with credentials.
/Brad