字节流:读写字节文件,通常使用字节流,如:二进制文件,.jpg,.mp3,.avi,.exe,.com,.dll
windows平台的执行文件:.exe,.com,.dll
字符流:读写字符文件,通常使用字符流,如:.txt,.java,.css,.doc,.html,*.xml
字节流可以读写任意文件。字符流不能读写字节文件。
字节流的概念
传输的数据单位是字节,也意味着字节流能够处理任何一种文件
字节流的组成:InputStream/OutputStream
以 Stream 结尾的是字节流,字节流只能处理字节流
以 Writer/Reader 结尾的是字符流,字符流既可以处理字符流,也可以处理字节流
字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,
而字符流在操作时使用了缓冲区,通过缓冲区再操作文件
字符流操作时使用了缓冲区,而 在关闭字符流时会强制性地将缓冲区中的内容进行输出,
但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:
字符流使用了缓冲区,而字节流没有使用缓冲区。
流分类:
1.Java的字节流
InputStream是所有字节输入流的祖先,而 OutputStream是所有字节输出流的祖先。
2.Java的字符流
Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new
字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的,但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化。这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联。在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的。
在从字节流转化为字符流时,实际上就是byte[]转化为String时,