脚本宝典收集整理的这篇文章主要介绍了【205天】黑马程序员27天视频学习笔记【Day20-上】,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
叨逼叨两句
快了快了~快乐快乐~
20-01:IO流概述及分类
概念
IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的类都在IO包中
流按流向分为:输入流和输出流。
-
流按操作类型分为:
字节流:字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的。
字符流:字符流只能操作纯字符数据,比较方便。
IO流常用父类
-
字节流的抽象父类
InputStream
OutputStream
-
字符流的抽象父类
Reader
WrITer
-
IO程序书写
使用前,导入IO包中的类
使用时,进行IO异常处理【IO流处理的是内存和硬盘之间数据的传输,硬盘有可能没有指定的文件】
使用后,释放资源
20-(02-03):FileinputStream
文件的结束标记是-1
read()一次读取一个字节,却返回int类型。
读取文件
package com.test.demo001; import java.io.FileInputStream; import java.io.IOException; public class Demo009 { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("yyy.txt"); int a; while((a = fis.read())!=-1){ System.out.PRintln(a); //读取出来的是码表值 } fis.close(); } }
为什么read()方法返回值是int
因为字节输入流可以操作任意类型的文件,比如音频和视频等,这些文件底层都是以二进制形式进行存储的,如果每次读取都返回byte,有可能读到中间时遇到11111111,这11111111是byte类型中的-1,由于Java程序遇到-1就会停止不读了,所有后面的数据就读不到了,所以在读取时,用int类型接收,如果是11111111会在其前面补上24个0凑足4个字节,那么byte类型的-1就变成int类型的255了,这样可以保证整个数据读完,而结束标记的-1就是int类型。【文件用write写入时,也会去掉前面的3个8位,确保数据的完整性】
20-(04-05):FileOutputStream
write方法虽然写出的是一个int数,但是文件上存入的会是去掉前3个8位的byte数。
package com.test.demo001; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo009 { public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream("cccccc.txt");//创建输出流对象,如果没有指定文件就创建一个 fos.write(97); //虽然写出的是一个int数,但是文件上存入的会是去掉前3个8位的byte数 fos.write(98); fos.write(99); fos.close(); } }
创建输出流对象时,如果没有指定文件就创建一个,如果有就清空那个文件的内容。
如果想要不清空内容直接续写,按下面的方法写:
FileOutputStream fos = new FileOutputStream("yyy.txt",true); fos.write(97); fos.write(98);
20-(06-10):拷贝
拷贝的三种方法
-
逐个字节拷贝【效率太低,开发不推荐】
package com.test.demo001; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Demo009 { public static void main(String[] args) throws IOException{ FileInputStream fis = new FileInputStream("20.19_day20总结.avi"); FileOutputStream fos = new FileOutputStream("test.avi"); int a; while((a = fis.read())!= -1){ fos.write(a); } fis.close(); fos.close(); } }
-
打包拷贝【容易内存溢出,开发不推荐】
package com.test.demo001; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Demo009 { public static void main(String[] args) throws IOException{ FileInputStream fis = new FileInputStream("20.19_day20总结.avi"); FileOutputStream fos = new FileOutputStream("test.avi"); // int a; // while((a = fis.read())!= -1){ // fos.write(a); // } byte[] arr = new byte[fis.available()]; fis.read(arr); fos.write(arr); fis.close(); fos.close(); } }
定义小数组拷贝【开发推荐】
一般形式
package com.test.demo001; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Demo009 { public static void main(String[] args) throws IOException{ FileInputStream fis = new FileInputStream("cccccc.txt"); FileOutputStream fos = new FileOutputStream("bbbbbb.txt"); byte[] arr = new byte[2]; int len; //读到的有效字符个数 while((len = fis.read(arr))!= -1){ fos.write(arr,0,len); } fis.close(); fos.close(); } }
标准格式
package com.test.demo001; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Demo009 { public static void main(String[] args) throws IOException{ FileInputStream fis = new FileInputStream("cccccc.txt"); FileOutputStream fos = new FileOutputStream("bbbbbb.txt"); byte[] arr = new byte[1024 * 8]; int len; //读到的有效字符个数 while((len = fis.read(arr))!= -1){ fos.write(arr,0,len); } fis.close(); fos.close(); } }
拷贝原理图
以上是脚本宝典为你收集整理的【205天】黑马程序员27天视频学习笔记【Day20-上】全部内容,希望文章能够帮你解决【205天】黑马程序员27天视频学习笔记【Day20-上】所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。