Les flots de caractères sont des objets de classe Reader (flots de caractères d'entrée) ou Writer (flots de caractères de sortie). Les méthodes read et write de ces classes sont analogues à celles opérant sur des flots d'octets, à la différence que c'est un caractère 16 bits qui est lu ou écrit, et non un octet.
La transformation d'un flot d'octets en un flot de caractères se fait à l'aide des classes OutputStreamWriter et InputStreamReader, par décoration d'un flot d'octets :
InputStreamReader isr = new InputStreamReader(System.in);
Cette conversion permet éventuellement de spécifier le codage utilisé (par exemple, par la chaîne "UTF8" s'il s'agit du codage des caractères Unicode par une suite d'octets de longueur variable) pour lire un fichier "toto":
InputStreamReader isr = new InputStreamReader( new FileInputStream("toto"), "UTF8");