The important thing to remember is that OutputStream is an abstract class, so you are actually dealing with objects of several different subclasses of OutputStream. Writing to a FileConnection object, you are using a different class of object than you are when writing to an HttpConnection, which is why they behave differently.
The confusion is that this:
Code:
httpout.write(data, 0, data.length);
httpout.flush();
works exactly as you expect. But this:
Code:
httpout.write(data, 0, data.length);
httpout.flush();
httpout.write(moreData, 0, moreData.length);
httpout.flush();
does not do what you expect. Only the first flush() actually seems to do anything. That's because, in many implementations (and this is not unique to Nokias), flushing an OutputStream from an HttpConnection causes the entire HTTP transaction to take place. All the bufferered output is sent to the server, and the response is read back from the server and buffered on the phone. Since the transaction is now complete, no more information can be sent, hence the second flush() doesn't seem to do anything.
So, flush() does work, but it leaves the HttpConnection object in a state where no more information can be sent (so only the first flush() actually does anything).
Expect surprises! 
Graham.