For the naming Java uses, "Streams" deal with transport of *bytes* and "Writers" deal with sending of *characters*.
Also in C there is no 'byte' only 'char' that means a byte but often is used for characters, and 'strings' are just arrays of 8-bit units that happen to have a zero value in one of their members. On the other hand Java has a 'byte' type for 8-bit data, a 'char' type for character data, and 'String' that is actually a class. in fact, all instances of string literals in Java programs are really instances of java.lang.String and you can do things like
if ( "magic".equals(myVar) ) {
}
Anyway, much of the reason to use terminology that sounds more like Java's than it sounds like C/C++ is that C/C++ terminology is very mismatched and ambiguous compared to Java's.