String类和IO流

IO流

什么是IO流
  • I

    • input 输入流
    • 读取
  • O

    • output 输出流
    • 写入
  • 文件操作为例

    • 从内存中保存的数据到硬盘 ----output 输出流
    • 从硬盘中读取数据到内存 ----input 输入流
      【注意】
    • 完整文件的传输要比散文件的要高得多!!!
  • IO流基类
    InputStream
     输入流基类
      read

  • OutputStream
     输出流基类
      write

IO流分类

字节流和字符流

一、字节I/O流的操作

  • InputStream类型
    • InputStream的作用表示那些从不同数据源产生输入的类,即其派生类多是不同数据源对应的流对象。
  • OutputStream类型
    与InputStream相对应,OutputStream的作用表示将数据写入不同的数据源。
  • FileInputStream
    文件操作输入字节流
  • FileOutputStream
    文件操作输出字节流

二、基于字符的I/O操作

  • Reader类型
    • 继承自Reader类的,字符型数据来源常用类,如下:
        InputStreamReader:字节与字符适配器,子类包含- —FileReader(以字符形式读取文件) 
        CharArrayReader:读取字符数组
        StringReader:数据源是字符串
        BufferedReader:读取字符输入流,并进行缓存,常用法:BufferedReader in = new BufferedReader(new FileReader(“foo.in”)); 表示采用缓存的方式从文件读取数FileReader
      文件操作输入字符流
      FileWriter
      文件操作输出字符流
  • 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是删除写/清空写操作,会将原文件中的内容全部删除之后,写入数据。

  • leOutputStream(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位)数据有效。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值