I/O流
InputStream--输入流 :数据源数据流向计算机内存的过程
OutputStream--输出流:把数据从程序流向目标数据源的过程
以程序为主体
,读取源数据源中的数据为输入流,比如读取数据库;写入到目标数据源中的数据为输出流,比如注册,登录等。
Java流概念---
数据流向某个对象的数据序, 并且到达这个对象的过程。
流与数据源和程序之间的关系
流与目标数据源和程序之间的关系
流的分类
1.按照流向划分
流的基类
- 输入流:以InputStream(字节输入流)和Reader(字符输入流)为基类
- 输入流:以OutputStream(字节输出流)和Writer(字符输出流)为基类
2. 按照处理数据单元划分
字节流与字符流的区别
字节流(byte):1字节8位,操作字节和字节数组
字符流(char):2字节16位,分别操作字符、字符数组或字符串,
程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件
字节流可处理字节文件,也可处理字符文件,所以字节流可用于任何类型的对象;字符流只能处理文本,也就是字符或者字符串
视频,图片,MP3等为字节文件;文本,word文档等为字符文件。如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点
在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。
InputStream
InputStream为父类,其余为子类。
重点:FileInputStream(读取文件),BufferedInputStream(缓冲读取)
磁盘的两种表示方式1.\\ 2./
InputStream is=new FileInputStream("E:/iodemo/ch01.txt");
InputStream is=new FileInputStream("E:\\iodem\\ch01.txt");
步骤
:
- 创建输入的连接
- 读取操作
声明byte数组
声明变量
循环读取数据
将字节数组转成字符串
(蓝色代码可省略,直接读取)
- 关闭流
例:读取文件内容:E盘iodemo-ch01 内容12345
方法1:
创建的字节数组的长度可以表示为is.available()
方法2:
While(is.available()==0)表示当网络不好的时候得不到文件的大小,就回一直循环,但方法不严谨,应该设置一个限制时间
方法3:
例:读取E盘iodemo-ch04文件,内容:你若安好便是晴天
例:skip()跳过n个字节开始读取 内容:1234567890
例:读取过程中暂停,给当前位置做一个标记,下一次从标记位置开始读取
内容:床前明月光疑是地上霜举头望明月低头思故乡
mark(index)设置断点
reset()将当前复位的位置设置成上次调用mark标记的位置
序列流(集合流)特点:把n个流合并在一起读取
方式1:
方式2:
例:读取多个文件,合并到序列流中
OutputStream
步骤:
- 把程序和目标源建立连接
- 把字符串转成字节数组
- 把数据完全冲刷道目标源中
- 关闭流
例:在E盘iodemo中写入out.tx文件
例:用BufferedOutputStream来写入
例:追加内容
例:用DataOutputStream写入文件,只能用DataInputStream读取
例:用PrintStream写入
例:将一个文件拷贝
例:读取图片文件,实现图片的拷贝