Java的I/O接口在包java.io下,主要包括以下几组,前两组主要是传输数据的数据格式,后两组主要是传输数据的方式。:
- 基于字节操作的I/O接口:InputStream和OutputStream。
- 基于字符操作的I/O接口:Writer和Reader。
- 基于磁盘操作的I/O接口:File。
- 基于网络操作的I/O接口:Socket。
无论是网络还是磁盘,最小的存储单元是字节,而不是字符。所以I/O操作的都是字节。出现字符操作只是方便我们平时的操作,因为平时的数据都是以字符的形式出现的。从字符到字节必须经过编码的转换。
磁盘I/O工作机制:
- 标准访问文件的方式:程序调用read()接口,操作系统检查内存中是否已经缓存数据,如果缓存了就直接返回,没有,则从磁盘中读取,然后写入缓存文件中。调用write()接口,则把数据从用户空间地址复制到内存地址的缓存中。这样对于程序来说已经完成了,什么时候再写入到磁盘中由操作系统决定。也可以显式的调用sync同步命令。
- 直接I/O的方式:程序直接访问磁盘数据,不经过操作系统内核数据缓冲区。
- 同步访问文件的方式。
- 异步访问文件的方式。
- 内存映射的方式。