黑马程序员-day20-字节流

------- <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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值