Io

谈谈 Java IO

版权声明:本文由 Hov 所有,发布于 http://chenhy.com ,转载请注明出处。 0 写在前面 IO 操作是任何编程语言都无法回避的问题,因为 IO 操作是机器获取和交换信息的主要途径。 Java 的 IO 是以流为基础进行输入输出的,所有的数据被串行化写入输出流或从输入流读入。 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。 注:流是一个很形象的概念。当程序需要读取数据时会开启一个通向数据源的流,这个数据源可以是文件、内存或网络连接。同样,当程序需要写入数据时会开启一个通向目的地的流,而数据就在数据源和目的地之间“流动”。 下图为 Java IO 体系的组成结构。由图可知, Java IO 主要分为字节流和字符流,其中字节流以 InputStream 和 OutputStream 向下继承,字符流以 Reader 和 Writer 向下继承。 本文将详细讲解字节流和字符流,并简要介绍随机存取文件 RandomAccessFile 和 Apache 的 IO 类库。 1 预备知识 在讲解 IO 相关的知识前,我们有必要了解一下字节、字符、编码等概念。毕竟 IO 操作实质上是基于字节、字符来实现的。 1.1 字节 字节是通过网络传输信息或硬盘、内存存储信息的单位,也是计算机用于计量存储容量和传输容量的一种计量单位。一个字节等于 8 位二进制,是一个很具体的存储空间,如 0x01,0x20 。 1.2 字符 字符是人们使用的记号,抽象意义上的一个符号。如“1”,“a”,“¥”,“好”等。实质上,字符是由字节组成的,一个字符可以由一个或多个字节组成。 1.3 字符集 不同国家和地区所制定的不同 ANSI 编码标准中,都只规定了各自语言所需的字符。汉字标准(GB2312)就是一个字符集,它规定的是汉字的编码标准。 字符集(编码)有两层含义: 使用哪些字符,也就是哪些字符、汉字或符号会被收入标准中,所包含“字符”的集合就叫做“字符集”; 规定每个字符分别用一个字节还是多个字节存储,用哪些字节存储,这个规定就叫做编码。 字符集和编码一般同时制定,字符集除了有“字符集合”含义外,还包含了“编码”的含义。 值得注意的是,为了使国际间信息交流更方便,国际组织制定了 UNICODE 字符集,它为各种语言中的每一个字符设定了统一且唯一的数字编号,以满足跨平台、跨语言进行文本交换、处理的要求,如我们熟悉的 UTF-8 。