[Java基础] 字节流与字符流的区别
字节流和字符流的使用其实是非常相似的,但新的问题就不由得不提出:两者除了操作代码上的不同之处,是否还有其他的不同呢?
实际上字节流在操作时本省不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
在操作字节流和字符偶的操作完成后都不关闭输出流,即便如此文件中也依然存在了输出的内容,证明字节流是直接操作文件本省的。而没有关闭字符流完成对文件的操作,文件中却不存在任何输出的内容,这是因为字符流操作时使用了缓冲区,而在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:字符流使用了缓冲区,而字节流没有使用缓冲区。
在很多敌方都能够碰到缓冲区这个名词,那么到底什么是缓冲区,又有什么啊作用?可以简单地把缓冲区理解为一段特殊的内存,某些情况下, 如果一个程序频繁地操作一个资源(如文件或数据库),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从此区域中读取数据即可,因为读取内存的速度会比较快,这样可以提升程序的性能。在字符流操作中,所有的字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存之中,所以使用了缓冲区暂存数据。
如果像在不关闭时也可以将字符流的内容全部输出,则可以使用Writer类的flush()方法完成。