黑马程序员-day20-字节流
2015-11-24 00:23
399 查看
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
FileInputStream | 构造方法 | 1、FileInputStream(String name) 通过文件路径构造一个字节输入流 2、FileInputStream(File file) 通过File对象创建字节输入流 |
读取方式 | 1、public int read() 读取单个字节所表示字符的int值,文件末尾返回-1,无法读取汉字(因为汉字占两个字节),使用char强转获取字符 | |
2、public int read(byte[] b)将最多b个长度字节读取进该数组,文件末尾返回-1使用String的构造方法String(byte[] len,int offset,int length)可将该数组部分或全部转为字符串,支持汉字 | ||
3、同方法2,但是可在创建数组时,将长度定位available获取的byte数据的数量,这样不需要循环,只需调用read方法一次即可获得全部文件的byte数组,优点是代码简单,缺点是容易内存溢出 | ||
特别方法 | public int available() 计算此流的剩余字节数 | |
关闭流 | public void close() | |
FileOutputStream | 构造方法 | 1、FileOutputStream(File file) 创建指定 File 对象表示的文件中写入数据的文件输出流。 2、FileOutputStream(File file, boolean append) 同上,但标识是否续写 3、FileOutputStream(String name) 创建向具有指定名称的文件中写入数据的输出文件流。 4、FileOutputStream(String name, boolean append) 同上,但标识是否续写 |
写入方式 | 1、public void write(int b)写入一个字节,接收字节的int值,可直接传递一个字符 | |
2、public void write(byte[] b) 写入字节数组中的所有字节 可将字符串先调用getBytes获取到一个字节数组,再使用此方法输出 | ||
3、public void write(byte[] b,int off,int len)写入字节数组的一部分 | ||
注意:与字符流不同的是,字节流在写入流后,不需要刷新,因此没有flush方法 | ||
关闭流 | public void close() | |
BufferedOutputStream和BufferedInputStream | 概念 | 为InputStream和OutputStream功能提供缓冲,从而提高读写效率,使用的是Decorator Pattern |
BufferedInputStream构造 | BufferedInputStream(InputStream in) 默认大小缓冲字符输入流 | |
BufferedInputStream(InputStream in, int sz) 指定大小缓冲字符输入流 | ||
BufferedOutputStream构造 | BufferedOutputStream(OutputStream out) 默认大小缓冲输出流 | |
BufferedOutputStream(OutputStream out, int sz) 指定大小缓冲输出流 | ||
方法 | 与非缓冲流一致,但注意效率上有区别 | |
非缓冲read() | 一次在硬盘上读取一个字节,并存入内存中变量b,然后再读下一个 | |
缓冲流read() | 一次在硬盘上读取多个字节,存入缓存数组,再一个个存入内存中变量b | |
非缓冲read(buf) | 一次在硬盘上读取一个字节,并存入内存中指定数组 | |
缓冲read(buf) | 一次在硬盘读取多个字节,并存入缓存流中的数组,再存入指定数组 | |
转换流 InputStreamReader | 概念 | 是Reader的子类,FileReader的父类;是字节流通向字符流的桥梁 作用:将字节流转换为字符流读入 |
构造方法 | InputStreamReader(InputStream in) 使用默认字符集 InputStreamReader(InputStream in, String charsetName) 使用指定的字符集 | |
使用 | 通常将其包装为缓冲字符流来使用(以下为典型的键盘录入流): BufferedReader in= new BufferedReader(new InputStreamReader(System.in)); | |
转换流 OutputStreamWriter | 概念 | 是Writer的子类,FileWriter的父类;是字符流通向字节流的桥梁 作用:将字符流转换为字节流输出(所有字符最终都是转换为字节输出的) |
构造方法 | OutputStreamWriter(OutputStream out) 使用默认字符集 OutputStreamWriter(OutputStream out, String charsetName) 使用指定字符集 | |
使用 | 通常将其包装为缓冲字符流来使用(以下为典型的键盘输出流): Writer out= new BufferedWriter(new OutputStreamWriter(System.out)); | |
流的操作规律 | 明确源与目的 | 源:使用输入流 InputStream或Reader 目的:使用输出流 OutputStream或Writer |
明确数据类型 | 文本:字符流 非文本:字节流 | |
明确具体流 | 通过设备区分: 输入:内存、硬盘、键盘(默认字节流System.in) 输出:内存、硬盘、控制台(默认字节流System.out) 通过需求区分: 是否需要指定编码表(使用转换流) 是否需要提高效率(使用缓冲流) | |
改变系统标准设备 | 改变输入设备 | public static void setIn(InputStream in) |
改变输出设备 | public static void setOut(PrintStream out) |
相关文章推荐