第十八天

1. IO流

1.1 什么是IO流

I
 input 输入流
 读取
O
 output 输出流
 写入

文件操作为例
从内存中保存的数据到硬盘 ----output 输出流
从硬盘中读取数据到内存 ----input 输入流
【注意】
完整文件的传输要比散文件的要高得多!!!

IO流基类
InputStream
 输入流基类
  read
OutputStream
 输出流基类
  write

1.2 IO流分类

字节流和字符流

一、字节I/O流的操作

  1. InputStream类型
    InputStream的作用表示那些从不同数据源产生输入的类,即其派生类多是不同数据源对应的流对象。
  2. OutputStream类型
    与InputStream相对应,OutputStream的作用表示将数据写入不同的数据源。
  3. FileInputStream
    文件操作输入字节流
  4. FileOutputStream
    文件操作输出字节流
    二、基于字符的I/O操作
  5. Reader类型
    继承自Reader类的,字符型数据来源常用类,如下:
      InputStreamReader:字节与字符适配器,子类包含FileReader(以字符形式读取文件) 
      CharArrayReader:读取字符数组
      StringReader:数据源是字符串
      BufferedReader:读取字符输入流,并进行缓存,常用法:BufferedReader in = new BufferedReader(new FileReader(“foo.in”)); 表示采用缓存的方式从文件读取数
      FileReader
    文件操作输入字符流
    FileWriter
    文件操作输出字符流
  6. Writer类型 
    继承自Writer类的,字符型数据来源常用类,如下:
      OutputStreamReader:字节与字符适配器,子类包含FileWriter(以字符形式写文件) 
      CharArrayWriter:写字符数组
      StringWriter:内部有StringBuffer,用于缓存构造字符串
      BufferedWriter:字符输出流,常用法:PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(“foo.out”))); 表示将数据格式化并用缓存的方式写入文件
文件读取使用缓冲和非缓冲差距

内存的运作速度看做是火箭
硬盘就是一个自行车
使用缓冲之后,从硬盘中一口气读取8KB数据存储在内存中,供程序使用,但这对于内存来说还是慢的很。
固态硬盘,4KB对齐。固态硬盘中每一个扇区都是4KB。缓冲这里是要求CPU读取两个4KB数据,对于CPU而言没有太多压力。

文件操作输入字节流

Constructor 构造方法
  FileInputStream(File file);
    这里是根据提供的File类对象创建对应的文件操作输入字节流。
  FileInputStream(String pathName);
    这里是根据提供的String类型文件路径,创建对应的文件操作输入字节流。
  这两种都会抛出异常:
    FileNotFoundException 文件未找到异常。
  
Method 成员方法 :
  int read();
    从文件中读取一个字节数据返回到方法外。
    虽然返回值是一个int类型,但是在整个int类型当中存储的数据是一个byte类型,有且只有低8位数据有效
  int read(byte[] buf);
    读取文件的内容是存储在byte类型数组中,返回值是读取到的字节个数
  int read(byte[] buf, int offset, int count);
    读取文件的内容是存储在byte类型数组中,要求从byte数组offset位置开始,到count长度结束,返回值是读取到的字节个数
   以上三个方法如果读取到文件末尾,返回值都是 -1 EOF End Of File而且以上方法都要异常抛出
   IOException IO异常

文件操作输出字节流

Constructor 构造方法
FileOutputStream(File file);
根据File类对象创建对应的文件输出字节流对象
FileOutputStream(String pathName);
根据String类型文件路径创建对应的文件输出字节流对象

以上两个构造方法,创建的FileOutputStream是删除写/清空写操作,会将原文件中的内容全部删除之后,写入数据。

FileOutputStream(File file, boolean append);
根据File类对象创建对应的文件输出字节流对象。创建对象时给予append参数为
true,表示追加写。
FileOutputStream(String pathName, boolean append);
根据String类型文件路径创建对应的文件输出字节流对象,创建对象时给予append参
数为true,表示追加写。

FileOutputStream构造方法是拥有创建文件的内容,如果文件存在,不创建,文件不存在且路径正确,创建对应文件。否则抛出异常FileNotFoundException
Method 成员方法
void write(int b);
写入一个字节数据到当前文件中,参数是int类型,但是有且只会操作对应的低八位数

void write(byte[] buf);
写入字节数组中的内容到文件中
void write(byte[] buf, int offset, int length);
写入字节数组中的内容到文件中,从指定的offset开始,到指定长度length

以上方法会抛出异常:IOException

字符流特征

如果是字符内容操作,效率还可以!!!
如果是非字符操作,凶多吉少!!!

字符流操作文件
个人建议,该文件可以使用notepad 记事本打开无乱码,可以使用字符流操作。
视频文件,图片文件,特定格式的文件,都无法使用字符操作。

文件操作输入/输出字符流

与字节基本一致
除了Method 成员方法中的int read();
读取文件中的一个字符数据,通过返回值返回,返回值类型是int类型,但是在int类型中有且只有(低16位)数据有效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值