What’s the benefit of using InputStream over InputStreamReader, or vice versa.
Here is an example of InputStream in action:
InputStream input = new FileInputStream("c:\\data\\input-text.txt");
int data = input.read();
while(data != -1) {
//do something with data...
doSomethingWithData(data);
data = input.read();
}
input.close();
And here is an example of using InputStreamReader (obviously with the help of InputStream):
InputStream inputStream = new FileInputStream("c:\\data\\input.txt");
Reader reader = new InputStreamReader(inputStream);
int data = reader.read();
while(data != -1){
char theChar = (char) data;
data = reader.read();
}
reader.close();
Does the Reader process the data in a special way?
Just trying to get my head around the whole i/o streaming data aspect in Java.
They represent somewhat different things.
The
InputStreamis the ancestor class of all possible streams of bytes, it is not useful by itself but all the subclasses (like theFileInputStreamthat you are using) are great to deal with binary data.On the other hand, the
InputStreamReader(and its fatherReader) are used specifically to deal with characters (so strings) so they handle charset encodings (utf8, iso-8859-1, and so on) gracefully.The simple answer is: if you need binary data you can use an
InputStream(also a specific one like aDataInputStream), if you need to work with text use anInputStreamReader..