15.8 常见疑难解答
15.8.1 字节流与字符流主要的区别
答:字节流是最基本的,所有的“InputStream”和“OutputStream”的子类都是字节流,其主要用于处理二进制数据,并按字节来处理。实际开发中很多的数据是文本,这就提出了字符流的概念,它按虚拟机的encode来处理,也就是要进行字符集的转化。这两者之间通过“InputStreamReader”和“OutputStreamWriter”来关联。实际上,通过“byte[]”和“String”来关联在实际开发中出现的汉字问题,这都是在字符流和字节流之间转化不统一而造成的。在从字节流转化为字符流时,实际上就是“byte[]”转化为“String”。
public String(byte bytes[],String charsetName)
注意 有一个关键的参数字符集编码,通常可以省略,就是操作系统的lang。
字符流转化为字节流,实际上是String转化为byte[]。
byte[]String.getBytes(String charsetName)
至于java.io中还出现了许多其他的流,主要是为了提高性能和使用方便,如“BufferedInputStream”、“PipedInputStream”等。