IO流概述

IO流用来处理设备之间的数据传输(上传文件和下载文件)

java对数据的操作是通过流的方式

java用于操作流的对象都在IO包中

IO流分类

按照数据流向

输入流 ,读入数据

输出流 ,写出数据

按照数据类型

字节流

字符流

什么情况下使用哪种流呢

如果数据所在的文件通过Windows自带的记事本打开并能读懂里面的内容,就用字符流其他用字节流

IO流的常用基类

字节流的抽象基类

InputStream OutputStream

字符流的抽象基类 (字符流=字节流+编码表)

Reader Writer

注:这四个类派生出来的子类名称都是以其父类名做为子类名称的后缀

如InputStream的子类FileInputStream

如Reader的子类FileRader

字节流输出流的操作步骤

A 创建字节输出对象

B 写数据

C 释放资源

为什么一定要close(呢)?

        1.让流对象变成垃圾,这样可以被垃圾回收站回收啦

        2.通知系统去释放跟该文件相关的资源

字节流写数据的方式

FileOutputStream(String name,boolean append)

FileOutputStream(File file,boolean)

如果参数append的值为true时 输入流的write()方法将在文件的末尾追加写入数据(假设文件已经存在),如果append的参数为false,输入流的write()方法将会刷新文件(假设文件已经存在),如果不设置append的值时 默认为false。

public void write(int b)

public void write(byte[] b)

public void write(byte[] b,int off,int len)

字节流读取数据

InputStream

FileInputStream

把刚才写的数据读取出来显示在控制台上

FileInputStream的构造方法

FileInputStream(File file)

FileInputStream(String name)

FileInputStream的成员方法

public int read()

public int read(byte[] b)

计算机中是如何识别什么时候该把两个字节转换为一个中文呢

第一个字节肯定是负数

第二个字节常见的是负数,可能有正数,但是没影响

方式一:一次读取一个字节

FileReader  fr=new FileReader("a.txt");
    int by=0;
    while((by=fr.read())!=-1){
    system.out.ptint((char) by);
}
fr.close();

 

方式二:一次读入一个字节数组

FileReader fr=new FileReader("a.txt");

    byte[] bys=new byte[5];

    int len=0;
    
    while((len=fr.read(bys))!=-1){

        System.out.print(new String(bys,0,len));

    }

fr.close();

字节缓冲流

字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,这是加入了数组这样的缓冲区的效果,java本身在设计的时候也考虑到了这样的设计思想(装饰设计模式)所提供的字节流缓冲区流

字节缓冲输出流

BufferedOutputStream

字节缓冲输入流

BufferedInputStream

字节流四种方式复制文件

基本字节流一次读一个字节

基本字节流一次读写一个字节数组

高效字节流一次读写一个字节

高效字节流一次读写一个字节数组

OutputStreamWriter的方法

public void write(int c); 写一个字符

public void write(char[] cbuf); 写一个字符数组

pubic void write(char[] cbuf,int off,int len); 写一个字符数组的一部分

public void write(String str) 写一个字符串

public void write(String str,int off,int len);写一个字符串的一部分

面试题:close()和flush()的区别

close()关闭流对象,但是先刷新一次缓冲区,关闭之后流对象不可以在使用

flush()仅仅刷新缓冲区 刷新之后,流对象还可以继续使用

 

OutputStreamWriter 读数据方法

InputStreamReader 读数据方法

public int read();

public int read(char[] cbuf)

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值