第六天的学习:
IO流:
概念:流是用来处理设备之间的数据传输的;Java对数据的操作是采用流的方式。
IO流按操作可以分为:字节流和字符流。
IO流的四个顶层基类:
字节流的基类:InputStream,OutputStream,
字符流的基类:Reader,Writer;
注意:使用的时候需要导包,使用之后需要close();
IO流FileInputStream操作方法:
int read();//一次读取一个字节
注意:返回值方法是int,而不是byte
原因:因为字节输入流操作的是任意类型的文件(即任意的二进制文件),文件的二进制序列中有可能
出现1111 1111的序列片段,如果返回值是byte类型的话。当读到这个字节的时候,返回值是-1。则出现
文件没有读取完就终止读取的问题。所以用int类型接收的时候,会在数据前面补上三个字节的0序列
这样翻译过来的就是255,就不会出现上述问题了。
IO流FileOutputStream操作方法:
writer();//一次写出一个字节;
虽然写出的是int类型,但是写出时会去掉前面的三个字节的0;
创建FileOutputStream对象的时候,路径文件如果没有,则会自动创建;
如果需要在已有的文件里追加数据,则在构造方法参数后多加一个参数true;
文件拷贝:
字节拷贝:效率太低;
创建大数组拷贝:可能会出现内存溢出;
小数组拷贝:数组大小最好是1024的正数倍;大小适中
BufferedInputStream和BufferedOnputStream:
BufferedInputStream
BufferedInputStream内置了一个缓冲区(数组)
从BufferedInputStream中读取一个字节时
BufferedInputStream会一次性从文件中读取8192个, 存在缓冲区中, 返回给程序一个
程序再次读取时, 就不用找文件了, 直接从缓冲区中获取
直到缓冲区中所有的都被使用过, 才重新从文件中读取8192个
BufferedOutputStream
BufferedOutputStream也内置了一个缓冲区(数组)
程序向流中写出字节时, 不会直接写到文件, 先写到缓冲区中
直到缓冲区写满, BufferedOutputStream才会把缓冲区中的数据一次性写到文件里
flush()和close()的区别:
共同点:两个方法均可以刷新缓冲区;
不同点:flush()刷新缓冲区不关流,可以再次写出close()刷新后关流;
字节流操作字符:
读字符不建议用字节流,因为可能会出现乱码;
写字符可以用字节流,因为字符串有Getbytes()方法;
标准异常处理办法,(两个版本);
然后我就去做练习了。。。 |
|