This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
You are failing to take account of the return value from read(), where it tells you how many bytes were read. On the last read(), and possibly other times, that will be fewer than would fit in buf. You always write the whole of buf, so when fewer bytes were read, you write spurious stuff.
You should use the version of write() that takes a start and length value.
While I'm here, though, your code will be slow. A buffer of 48 bytes is much too small; a few thousand bytes would be more typical. Also, you should not flush() after every write. If you flush() at all, do it only after writing everything. In fact, close() will generally do an implicit flush() anyway.
Betty Rubble? Well, I would go with Betty... but I'd be thinking of Wilma.
You will notice that read, reads up to b.length, so it may read less. However, write writes the full buffer, so if the previous read didn't fill the whole buffer, you will get garbage values in your output.
You need to check how much is actually read and then write exactly that amount to the output stream.
SCJP 1.4, SCWCD 1.4
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com
subject: Copying data into a file using inputstream