输入字节流与输出字节流

/*
 * File类:用于描述一个文件或者文件夹
 * 通过File对象我们可以读取文件或者文件夹的属性数据,如果我们需要读取文件的内容数据,那么我们需要使用IO流技术。
 * IO流(Input Output)
 * IO流解决的问题: 解决设备与设备之间的数据传输问题。  内存--->硬盘  硬盘--->内存
 * IO流技术:
 * IO流分类:
 *   按数据的流向划分:
 *       输入流   输出流
 *   按处理的单位划分:
 *       字节流:字节流读取到得都是文件中二进制数据,读取到二进制数据不会经过任何处理
 *       字符流:字符流读取的数据是以字符为单位的。字符流也是读取文件中的二进制数据,不过会把这些二进制数据转化成我们能识别的字符
 *             字符流:字节流+解码
 *             
 * 输入字节流:
 * ------------|InputStream   所有输入字节流的基类   抽象类
 * ----------------|FileInputStream   读取文件数据的输入字节流
 * 使用FileInputStream读取文件数据的步骤:
 *    1.找到目标文件
 *    2.建立数据的输入通道
 *    3.读取文件中的数据
 *    4.关闭资源  
 *
 *    
 * 问题1:读取完一个文件的数据的时候,我不关闭资源有什么影响?
 * 答案:资源文件一旦使用完毕应该马上释放,否则其他的程序无法对该资源文件进行其它的操作。

 * */

输入字节流与输出字节流_第1张图片

运行结果:bbbbbbbb


/*
 * 输出字节流:
 * ----------|OutputStream  是所有输出字节流的父类。 抽象类
 * --------------|FileOutStream  向文件输出数据的输出字节流
 * FileOutputStream如何使用呢?
 *    1.找到目标文件
 *    2.建立数据的输出通道
 *    3.把数据转换成字节数组写出
 *    4.关闭资源
 * 
 * FileOutputStream要注意的细节:
 *    1.使用FileOutputStream的时候,如果目标文件不存在,那么会自动创建目标文件对象
 *    2.使用FileOutputStream写数据的时候,如果目标文件已经存在,那么会先清空目标文件中的数据,然后再写入数据
 *    3.使用FileOutputStream写数据的时候,如果目标文件已经存在,需要在原来数据基础上追加数据的时候应该使用new FileOutputStream(file,true)构造函数,第二参数为true
 *    4.使用FileOutputStream方法写数据的时候,虽然接收的是一个int类型的数据,但是真正写出的只是一个字节的数据,只是
 *      把低八位的二进制数据写出,其他二十四位数据全部丢弃
 * */

输入字节流与输出字节流_第2张图片


/*
 *  4.使用FileOutputStream方法写数据的时候,虽然接收的是一个int类型的数据,但是真正写出的只是一个字节的数据,只是
 *    把低八位的二进制数据写出,其他二十四位数据全部丢弃
 *    00000000-00000000-00000001-11111111   511
 */

输入字节流与输出字节流_第3张图片

运行结果:字节数组的内容:[-1, 0, 0, 0]


/*
 * IO异常的处理
 * */

输入字节流与输出字节流_第4张图片输入字节流与输出字节流_第5张图片

运行结果:

读取文件出错了
Exception in thread "main" java.lang.RuntimeException: java.io.FileNotFoundException: D:\bbbb.txt (系统找不到指定的文件。)
at Day20.Demo05.readTest(Demo05.java:30)
at Day20.Demo05.main(Demo05.java:12)
Caused by: java.io.FileNotFoundException: D:\bbbb.txt (系统找不到指定的文件。)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.(Unknown Source)
at Day20.Demo05.readTest(Demo05.java:20)
... 1 more

/*
 * 需求:拷贝一张图片
 * 
 * */

输入字节流与输出字节流_第6张图片输入字节流与输出字节流_第7张图片

运行结果:关闭输出文件成功
                    关闭输入文件成功

/*
 * 缓冲输入字节流
 * 输入字节流体系:
 * ------| InputStream  输入字节流的基类。抽象
 * -----------| FileInputStream  读取文件数据的输入字节流
 * -----------| BufferedInputStream 缓冲输入字节流   缓冲输入字节流的出现主要是为了提高读取文件数据的效率
 * 其实该类内部只不过是维护了一个8kb的字节数组而已。
 * 
 * 注意:凡是缓冲流都不具备读写文件的能力
 * 
 * 使用BufferedInputStream的步骤:
 *    1.找到目标文件
 *    2.建立数据的输入通道
 *    3.建立缓冲输入字节流
 *    4.关闭资源
 * 
 * */

输入字节流与输出字节流_第8张图片

运行结果:?

/*
 * 输出字节流
 * ----------| OutputStream  所有输出字节流的基类   抽象类
 * ---------------|FileOutputStream  向文件输出数据的输出字节流
 * ---------------|BufferedOutputStream 缓冲输出字节流   BufferedOutputStream出现的目的是为了提高写数据的效率
 *                                      内部也是维护了一个8kb的字节数组而已。
 * 使用BufferedOutputStream的步骤:
 *    1.找到目标文件
 *    2.建立数据的输出通道
 * BufferedOutputStream要注意的细节:
 *    1.使用BufferedOutputStream些数据的时候,它的write方法是先把数据写到它内部维护的字节数组中
 *    2.使用BufferedOutputStream些数据的时候,它的write方法是先把数据写到它内部维护的字节数组中,如果需要把数据真正的写到硬盘上面,
 *      需要调用flush方法或者是close方法、或者是内部维护的字节数组已经填满数据的时候。                                    
 * */

输入字节流与输出字节流_第9张图片

/*
 * 练习:使用缓冲输入输出字节流拷贝一个图片
 * 
 * */

输入字节流与输出字节流_第10张图片


你可能感兴趣的:(输入字节流与输出字节流)