黑马程序员-day20-字节流

------- android培训java培训、期待与您交流! ----------

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学习笔记)