第十六节IO流

来源:互联网 发布:淘宝内衣评价不能晒图 编辑:程序博客网 时间:2024/06/06 03:01

————————————–字节流
1.IO流
Input/ Output 流
本地中的数据 程序 之间 读写 操作
概念:类比水流 数据从一个位置 流向另一个位置,数据的传输.
2.分类: 重点
1.流向 以程序为立场
输入流 数据进入程序
输出流 数据从程序中出去(保存到本地 上传数据)
2.单位 Bit (位)0,1 Byte(字节) 8位
字节流 每次操作的都是一个字节
字符流 每次操作的是字符 一个字符2字节 16位(操作的中文)
3.功能
节点流 直接接触数据源的流
处理流 也叫过滤流 没有直接接触数据而是嵌套在别的流之上
3.四大基类流
InputStream 字节输入流
OutputStream 字节输出流
Reader 字符输入流
Writer 字符输出流
4.流的操作步骤
InputStream 读取本地文件中内容 -读取数据,显示到控制台
1.确定数据源
File file=new File(pathname);
2.确定流向
InputStream is=null;
is=new FileInputStream(file);//出现受检异常
3.操作流 读写操作–读入数据
is.read();//出现异常 IOException 读入一个字节 当拿到-1时 就读完成了
4.关闭流
finally{
is.close();/抛出异常 //close底层调用了 flush方法
}
5..InputStream 读的操作
read() \int 用于读取一个字节 返回值是读取数据的本身 如果读到末尾 返回-1
read(byte[] b)
int 用于读取数据 最多读取长度是数组长度 数据存入数组中 返回值是实际上读取的内容长度
如果读到末尾 返回-1
read(byte[] buffer,int off , int len) buffer 用于存储读入的数据
off:偏移量 数据存入数组中的起始下标
len: 预计读入的数量
返回值:实际读入的数量
用于读取数据 数据也是存入到数组中 从下标off位置开始存储 返回值是实际读取的长度 l
普通文件 1024 数组长度
视频和音频 1024*2

6.OutputStream 写的操作
需求:将data数据写到 某文件中
保留数据到本地文件中 如果文件不存在 输出流 会自动创建一个文件 然后写出内容
但是目录不存在 将会抛出异常
write( ) 将参数所表示的内容写出 该方法执行一次 就表示写出衣蛾一个字节
wirte(byte[]) 将参数所有的字节数组中的数据 全部写出
write(byte[],int off ,int len)

String类
字节数组 getBytes()
字符数组 toCharArray()
构造函数 第二个参数 true 是追加 默认false 覆盖

6.字符流 以字符为单位 Reader
read( ) 读入一个字符 返回值 是读取的数据 读到末尾返回-1
read(char[]) UI次读取多个字符 最多 读取到是数组长度的个数 实际读到的长度是 返回zh
值 len 数据存入数组中 读到末尾返回-1
read(char[],int off,int len)
一次读入多个字符 最多读取len长度 实际读入的数量是方法的返回值
从 off下标开始 存入数组中 读取到 末尾返回-1\

7 字符流 以字符为单位 写出数据 Writer
“\r\n” 换行

———————————–字符流
1.Writer
字符输出流主要将数据写入该流得自带缓冲区中
flush 表示舒心缓冲区,将缓冲区的内容 写入到文件中
字符流必须要刷新或者关闭
字符流本身是自带一块缓存区的字节流 尝试去读
如果遇到一个’a’就在Ascll编码表里找 找到则输出,但是如果是汉字,先读取半个,在编码表
中寻找 缓存起来 再读另一半 组合在一起 输出字符

2.转换流
字节和字符的转换:
InputStream is = System.in; 控制台输入输出流
PrintStream ps = System.out;
输入流 : InputStreamReader(InputStream is)
输出 : OutputStreamWriter(OutputStram os)
访问文件尽量使用缓冲流 特别是大文件

3.缓冲流
BufferedReader 缓冲字符输入流
new BufferredReader(Reader及其子类)
readLine() String 类型 读一行
BufferedWriter
newLine 换行
BufferedInputStream
BufferedOutputStream
4.内存流
因为都写在内存中所以操作文本文件时 无论使用字节还是字符流 都不会出现乱码现象
本质:自己创建一块数组 用于存储写入的数据
特点 数组 :会随着数据的容量增加
ByteArrayOutputStream 将数据存入到内存流中
取出
toByteArray() byte[]
toString () String
使用ByteArrayInputStream 从内存中一点点取出数据
5.对象流 Object 存储对象到本地文件中 将对象转为一个二进制编码存入文件中–对象序列化
将这些二进制编码 转为对象的过程 叫反序列化.
ObjectIntputStream 二进制编码转为对象
ObjectOutputStream 将对象转为二进制编码保存到本地文件中.
NotSerializableException 不能序列化异常
transient 该属性不会被序列号
要定义序列号 当类发生变化 序列号不会改变
静态 属性 不会被序列化 因为它属于类而不是对象
6.随机访问流
RandomAccessFile 可以设置光标在文件中位置
getFilePointer 获取光标位置
skipBytes()可以跳过n个字节
seek() 设置光标距离开头有几个字节

原创粉丝点击