Oops - I didn't read carefully enough. You can user the read(char) and write(char) to handle a large number of characters at once. You'll need to create your own char array as a buffer, transferring chars from one stream to another. That's generally the preferred way to make IO more efficient. It will still need to be in a loop, as you can never guarantee how many chars will be read each time - but you can do a lot more reading/writing in each iteration. Also, you may find it useful to presize your StringBuffer using the length() method of the File class. This also depends on the character encoding used. It speeds things up if the StringBuffer doesn't have to keep resizing itself.