java中的IO流
2016-04-22 17:27
211 查看
IO流
i = input = 输入 o = output = 输出
什么是流?
流是数据从源点通向汇点的管道
流的分类:
按照方向分: 输入流 输出流
按照单位分: 字节流 字符流
按照功能分: 节点流 过滤流
*:过滤流 = 包装流 = 处理流
*:所有的流 都需要在使用结束之后关闭流 close();
抽象类
InputStream 所有字节输入流统一的父类(抽象类)
int read()
int read(byte[] data)
int read(byte[] data,int off,int len)
OutputStream 所有字节输出流统一的父类(抽象类)
write(int data)
write(byte[] data)
write(byte[] data,int off,int len)
FileInputStream 输入流 字节流 节点流
*:构造方法允许传入String或者File
*:一定要保证连接的是个文件 绝对不能连接目录 否则直接异常
*:最常用的read是那个带数组参数的read(byte[] data)
FileOutputStream 输出流 字节流 节点流
*:构造方法允许传入String或者File
*:节点输出流创建对象的时候 其连接的文件即便不存在 也会自动创建
如果文件已经存在 也会被新的空白文件替换(当心哦 会替换!)
createNewFile() 不需要去调用
*:如果节点输出流连接的目录结构都不存在 它是不能创建的 而会直接异常
mkdirs()
*:节点输出流构造方法的第二个参数 允许传入一个布尔值
代表是否追加模式打开目标文件
*:无论何时何地 千万不要让输入流和输出流同时连接同一个文件
否则怎么都是错!
*:跟输入流不同 输出流最常用的方法 不是单个参数的write(byte[])
而是三个参数的write(byte[] data,int off,int len)
否则会出现“尾巴”
===============================================================
*: 它们能给原本的节点流添加缓冲空间
从而大幅度的提高每次读写的吞吐量 进而提高效率...
*: 作为过滤流 它是不允许直接连接数据的源点或者汇点的(不能连接文件)
只能连接其他的流
*: 构造方法的第二个参数允许指定缓冲空间的大小 默认只有8192字节 = 8K
当我们读取的文件很大的时候 需要自定义大小
BufferedInputStream 字节流 输入流 过滤流
*: 注意要使用三个参数的read(byte[] data,int off,int len)
单参read()并没有利用缓冲空间...
BufferedOutputStream 字节流 输出流 过滤流
*: 在无法关闭流的情况下 一定注意清空缓冲区...
缓冲区什么条件下清空?
1.满了自动清空
2.关闭流的操作会触发清空缓冲
3.手动调用flush() 主动清空缓冲
================================
FileReader fr = new FileReader("focus.txt");
FileWriter fw = new FileWriter("sucof.txt");
//如果直接使用这两个流是无法完成按行读取的
BufferedReader br = new BufferedReader(fr);
BufferedWriter bw = new BufferedWriter(fw);
String str;
while((str = br.readLine())!=null){
bw.write(str);
bw.newLine();//写出一个由系统决定的换行标识
}
br.close();
bw.close();
IO流
i = input = 输入 o = output = 输出
什么是流?
流是数据从源点通向汇点的管道
流的分类:
按照方向分: 输入流 输出流
按照单位分: 字节流 字符流
按照功能分: 节点流 过滤流
*:过滤流 = 包装流 = 处理流
*:所有的流 都需要在使用结束之后关闭流 close();
抽象类
InputStream 所有字节输入流统一的父类(抽象类)
int read()
int read(byte[] data)
int read(byte[] data,int off,int len)
OutputStream 所有字节输出流统一的父类(抽象类)
write(int data)
write(byte[] data)
write(byte[] data,int off,int len)
FileInputStream 输入流 字节流 节点流
*:构造方法允许传入String或者File
*:一定要保证连接的是个文件 绝对不能连接目录 否则直接异常
*:最常用的read是那个带数组参数的read(byte[] data)
FileOutputStream 输出流 字节流 节点流
*:构造方法允许传入String或者File
*:节点输出流创建对象的时候 其连接的文件即便不存在 也会自动创建
如果文件已经存在 也会被新的空白文件替换(当心哦 会替换!)
createNewFile() 不需要去调用
*:如果节点输出流连接的目录结构都不存在 它是不能创建的 而会直接异常
mkdirs()
*:节点输出流构造方法的第二个参数 允许传入一个布尔值
代表是否追加模式打开目标文件
*:无论何时何地 千万不要让输入流和输出流同时连接同一个文件
否则怎么都是错!
*:跟输入流不同 输出流最常用的方法 不是单个参数的write(byte[])
而是三个参数的write(byte[] data,int off,int len)
否则会出现“尾巴”
===============================================================
*: 它们能给原本的节点流添加缓冲空间
从而大幅度的提高每次读写的吞吐量 进而提高效率...
*: 作为过滤流 它是不允许直接连接数据的源点或者汇点的(不能连接文件)
只能连接其他的流
*: 构造方法的第二个参数允许指定缓冲空间的大小 默认只有8192字节 = 8K
当我们读取的文件很大的时候 需要自定义大小
BufferedInputStream 字节流 输入流 过滤流
*: 注意要使用三个参数的read(byte[] data,int off,int len)
单参read()并没有利用缓冲空间...
BufferedOutputStream 字节流 输出流 过滤流
*: 在无法关闭流的情况下 一定注意清空缓冲区...
缓冲区什么条件下清空?
1.满了自动清空
2.关闭流的操作会触发清空缓冲
3.手动调用flush() 主动清空缓冲
================================
FileReader fr = new FileReader("focus.txt");
FileWriter fw = new FileWriter("sucof.txt");
//如果直接使用这两个流是无法完成按行读取的
BufferedReader br = new BufferedReader(fr);
BufferedWriter bw = new BufferedWriter(fw);
String str;
while((str = br.readLine())!=null){
bw.write(str);
bw.newLine();//写出一个由系统决定的换行标识
}
br.close();
bw.close();
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树