Java IO流

JAVA IO 流

IO 流的总体分类:

Java IO流_第1张图片

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间传输成为流

流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

字节流

是Java中可以按照最小字节单位读取的流,每次读写一个字节,字节流是直接连接到输入源的流。

字符流

以字符为最小单位读取。

字节流和字符流的区别:

  • 在所有的流操作中,字节永远是最基础的。任何基于字节的操作都是正确的。无论你是文本文件还是二进制文件,如果确认流里面只有可打印的字符,包括英文的和各种国家的文字,也包括中文。那么可以考虑用字符流。由于编码不同,多字节的字符可能占用多个字节,比如GBk的汉字汉字就占用2个字节,而UTF-8的汉字就占用3个字节。所以,字符流是根据指定的编码,将1个或者多个字节转化为java里面的unicode的字符,然后进行操作,字符操作一般使用Writer,Reader等,字节操作一般都是InputStream,OutputStream以及各种包装类,比如BufferedInputStream和BufferedOutputStream等。

  • 字节流在操作的时候本身是不会用到缓冲区,是直接与文件本身直接操作的,而字符流的操作使用了缓冲区。在某些情况下,如果一个程序频繁的操作一个资源(文件),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从内存中读取数据,因为读取内存的速度比直接读取文件的速度要快,这样可以提升程序的性能。如果在使用完字符流后没有关闭,那么存储在缓冲区的内容无法输出。在关闭字符流时会强制性地将缓冲区的内容进行输出,如果想在不关闭时也可以将字符流的内容全部输出,则可以使用flush方法强制进行刷新缓冲区。

你可能感兴趣的:(JAVA)