字节流

  首先介绍一下IO流。IO:输入\出(input/output),用于处理设备间数据传输问题。

  流:一种抽象概念,对数据传输的总称。可以把其想象成水流,这个水流中传输的是数据。其本质为数据传输。

  常用应用:文件复制、文件上传、文件下载。

IO流分类

  根据数据流向可以分为输入流(读取数据)和输出流(写数据);根据数据类型可以分为字节流和字符流,字节流可以分为字节输入流和字节输出流,字符流也可以分为字符输入流和字符输出流。字节流被称为万能流,字符流只适用于记事本能读懂的文件输入输出。

字节流写数据

  抽象基类 InputStream:输入流所有类的超类。

                  OutputStream:输出流所有类的超类。

  子类名的特点:子类名称都以其父类名作为子类名的后缀。

  FileOutputStream:文件输出流将数据写入File文件;

  FileOutputStream(String,name):创建文件输出流以指定名称写入文件

  步骤①创建字节输出流对象(创建文件、创建输出流对象、将字节输出流指向文件)②调用写数据的方法;③释放资源。

自学Java第三十五课_输入流

 

 自学Java第三十五课_写数据_02

 

 写数据的方式

void write(int b) 将指定字节写入此文件,一次一个字节
void write(byte[] b) 将b.length字节从指定字节数组写入此文件,一次一个字节数组
void write(byte[] b,off,len) 将len字节从指定字节数组开始,从偏移量off(类似索引)开始写入输出流,一次一个字节数组部分数据

 

 

 

 

 

自学Java第三十五课_写数据_03

 

 自学Java第三十五课_输入流_04

 

 字节流写数据两个问题

  ①换行:写完数据加换行符

  windows:\r\n   Linux:\n   mac:\r

  ②追加写入:public FileOutputStream(String name,boolean append)当第二个参数为true时,写入文件末尾

自学Java第三十五课_字符流_05

 

 自学Java第三十五课_字符流_06

 

 字节流异常处理

  异常处理有两种方式,try...catch处理或直接抛出。直接抛出常用。

  finally:在异常处理时提供finally块来执行所有清除操作。特点:被finally控制的语句一定会执行,除非JVM退出。

  格式:

  try{

  可能会发生异常的代码;

  }catch(异常类名 变量名){
  异常处理代码;

  }finally{
  执行清除操作;

  }

自学Java第三十五课_输出流_07

 

 字节流读取数据(一次一个字节)

  FileputStream:从文件系统获取输入字节

  FileInputStream(String name):通过打开与实际文件的连接创建一个FileInputStream,文件由name命名。

  读取数组时便需要提前定义一个数组,其他与读取字节相同

自学Java第三十五课_字符流_08

 

 自学Java第三十五课_输出流_09

 

 之后便进行了两个案例,复制文件和复制图片

自学Java第三十五课_写数据_10

 

 自学Java第三十五课_输入流_11

 

 字节缓冲流

  BufferOutputStream:实现缓冲输出流,应用程序可以向底层输出流写入字节,不必为写入的每个字节导致底层系统的调用。

  BufferInputStram:创建一个内部缓冲区数组,从流中读取或跳过字节时,内部缓冲区根据需要从包含的输入流中重新填充。

  构造方法

BufferedOutputStream 输出流
BufferedInputStream 输入流

 

 

 

注:字节缓冲流仅仅提供缓冲区,真正读写数据靠字节流

自学Java第三十五课_输出流_12

 

 在使用字节流时在最后必须调用close(),对资源进行释放。

明天将继续学习IO中的字符流。