JavaIO

1. Java文件对象

Java中File类提供了四种构造方式。

 

这四种构造方式实现了Java可以在默认路径创建文件/文件夹、在给定路径下创建文件。

对于一个文件对象,可以访问它的名字、父路径、绝对路径、相对路径。

File也提供了创建一个文件、文件夹、临时文件的方法。

File提供了很多对文件的操作和查看方法,具体查阅API。

文件的读写要使用到流。

2.IO分类

JavaIO流的体系

 

2.1按照流向

a)       输入流

只能向其中读取数据不能写入数据。(磁盘->内存、网络->本地)(基类:InputSream和Reader)

b)       输出流

只能向其中写入数据不能读取数据。(内存->磁盘、服务器->网络)(基类:OutputSream和Writer)

 

2.2按照操作数据单位

字节流和字符流的操作几乎一致,区别在于操作单位。

a)       字节流

字节流的操作单位是8位的字节。主要由InputStream和OutputStream作为基类。

 

b)       字符流

字符流的操作单位是16位的字符。主要由Reader和Writer作为基类。

 

字符流和字节流的使用时机

处理音频文件、图片、歌曲,优先使用字节流;
处理是关系到中文(文本)的,使用字符流更佳;

可以使用字符流处理的也可以用字节流处理,能使用字节流处理的不一定能使用字符流处理。

区别:

1、字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的

2、字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容

3、Reader类的read()方法返回类型为int :作为整数读取的字符(占两个字节共16位),范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1
inputStream的read()虽然也返回int,但由于此类是面向字节流的,一个字节占8个位,所以返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。因此对于不能用0-255来表示的值就得用字符流来读取!比如说汉字.

4、字节流与字符流主要的区别是他们的的处理方式

字节流:处理字节和字节数组或二进制对象;

字符流:处理字符、字符数组或字符串。

2.3按照角色

a)       节点流(介质流)

可以从/向一个特定的IO设备(磁盘、网络)读/写数据的流。

 

程序直接连接到数据源,和实际的输入输出节点连接。

b)       操作流(装饰流)

用于对已存在的流进行连接或封装,通过封装后的流来实现读写。

 

区分处理流和节点流

如若一个流的构造函数的参数是一个数据源说明是节点流,

如果一个流的构造函数参数是一个字节流说明是操作流程。

处理流的优点

  1. 对于开发人员来讲,处理流的操作更加简单。
  2. 处理流的执行效率更高。

3.流的概念模型

a)       输入流

 

b)       输出流

 

原文地址:https://www.cnblogs.com/zhihow/p/9851342.html