自学Java第三十五课
字节流
首先介绍一下IO流。IO:输入\出(input/output),用于处理设备间数据传输问题。
流:一种抽象概念,对数据传输的总称。可以把其想象成水流,这个水流中传输的是数据。其本质为数据传输。
常用应用:文件复制、文件上传、文件下载。
IO流分类
根据数据流向可以分为输入流(读取数据)和输出流(写数据);根据数据类型可以分为字节流和字符流,字节流可以分为字节输入流和字节输出流,字符流也可以分为字符输入流和字符输出流。字节流被称为万能流,字符流只适用于记事本能读懂的文件输入输出。
字节流写数据
抽象基类 InputStream:输入流所有类的超类。
OutputStream:输出流所有类的超类。
子类名的特点:子类名称都以其父类名作为子类名的后缀。
FileOutputStream:文件输出流将数据写入File文件;
FileOutputStream(String,name):创建文件输出流以指定名称写入文件
步骤①创建字节输出流对象(创建文件、创建输出流对象、将字节输出流指向文件)②调用写数据的方法;③释放资源。
写数据的方式
void write(int b) | 将指定字节写入此文件,一次一个字节 |
void write(byte[] b) | 将b.length字节从指定字节数组写入此文件,一次一个字节数组 |
void write(byte[] b,off,len) | 将len字节从指定字节数组开始,从偏移量off(类似索引)开始写入输出流,一次一个字节数组部分数据 |
字节流写数据两个问题
①换行:写完数据加换行符
windows:\r\n Linux:\n mac:\r
②追加写入:public FileOutputStream(String name,boolean append)当第二个参数为true时,写入文件末尾
字节流异常处理
异常处理有两种方式,try...catch处理或直接抛出。直接抛出常用。
finally:在异常处理时提供finally块来执行所有清除操作。特点:被finally控制的语句一定会执行,除非JVM退出。
格式:
try{
可能会发生异常的代码;
}catch(异常类名 变量名){
异常处理代码;
}finally{
执行清除操作;
}
字节流读取数据(一次一个字节)
FileputStream:从文件系统获取输入字节
FileInputStream(String name):通过打开与实际文件的连接创建一个FileInputStream,文件由name命名。
读取数组时便需要提前定义一个数组,其他与读取字节相同
之后便进行了两个案例,复制文件和复制图片
字节缓冲流
BufferOutputStream:实现缓冲输出流,应用程序可以向底层输出流写入字节,不必为写入的每个字节导致底层系统的调用。
BufferInputStram:创建一个内部缓冲区数组,从流中读取或跳过字节时,内部缓冲区根据需要从包含的输入流中重新填充。
构造方法
BufferedOutputStream | 输出流 |
BufferedInputStream | 输入流 |
注:字节缓冲流仅仅提供缓冲区,真正读写数据靠字节流
在使用字节流时在最后必须调用close(),对资源进行释放。
明天将继续学习IO中的字符流。