Actually, the javadoc already tells you what the differences are. From java.io.FileInputStream:
Quote:
FileInputStream is meant for reading streams of raw bytes such as image data. For reading streams of characters, consider using FileReader.
Source:
FileInputStream (Java Platform SE 6)
BufferedReader implements a line-buffered layer on top of FileReader to allow convenient extraction of lines, and usually buffered I/O is more efficient. But of course, this is only relevant to text files because binary files have no notion of "lines".
Also, the fact that FileInputStream is byte-oriented and FileReader is character-oriented will be obvious when it comes to reading multibyte files, that uses an encoding where a character consists of 2 or more bytes. FileReader will decode properly because that is character-oriented.