------- <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) |
本文详细介绍了Java中的IO流操作,包括字节流 FileInputStream 和 FileOutputStream 的使用方法,以及如何利用缓冲流 BufferedInputStream 和 BufferedOutputStream 提高读写效率。此外,还介绍了如何通过 InputStreamReader 和 OutputStreamWriter 进行字节流与字符流之间的转换。
779

被折叠的 条评论
为什么被折叠?



