黑马程序员 关于学习毕老师IO流后的一些笔记

来源:互联网 发布:linux home没root权限 编辑:程序博客网 时间:2024/05/16 05:33

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------


流的本质是数据传输,根据数据传输特性将流抽象为各种累,方便更直观的进行数据操作


IO流的分类
根据处理数据类型的不同分为:字符流和字节流
根据数据流向不同分为:输入流和输出流




字符流和字节流
字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:


读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

IO流常用基类:
1,字节流的抽象基类
  InputStream  OutputStream
2, 字符流的抽象基类
Reader  Writer


注:由这四个类派生出来的子类名称都是以基类父类名作为子类名的后缀


如:InputStream 的子类FileTnputStream
    Reader的子类 FileReader


字符流:
IO异常处理方式


FileWriter fw =null;
try
{
fw=new ("Demo.txt");
fw.write("abcd");
}
catch(IOException e)
{
System.out.println("catch:+e.toString());
}
finally
{
try
{
if(fw!=null)
fw.close();
}
catch (IOEception e)
{
System.out.println(e.toString);
}
}


字符流的缓冲区:


作用:提高了对数据的读写效率
在创建缓冲区前必须先有流对象


对应类:
BufferedWriter
BufferedReader


BufferedWriter burw = new BufferedWriter(fw);
bufw.close();


//其实关闭缓冲区,就是关闭缓冲区中的流对象
所以不用fw.close();


该缓冲区提供了换行fangfa
newline(); 调用一次,换行一次 




BuffereReader
该缓冲区提供了一个一次读一行的方法 readline
方便于对文本数据的获取


当返回NULL时,表示读到末尾


readline 方法返回的时候只返回回车符之前的数据内容,并不返回回车符,要调用newline();


装饰类通常会通过构造方法接受呗装饰的对象 并基于被装饰的对象的功能,提供更强的功能。比如  BuffereRead 就是FileRead的装饰类


装饰体系比继承更灵活,降低了类与类之间的关系。






字符串变数组
"abc".getBytes();


复制图片


思路:


1,用字节流对象关联图片
2,用字节写入刘对象创建一个图片文件,用于存储获取到的图片数据
3,通过循环读写,完成数据存储
4,关闭资源。




最后总结下流操作的基本规律:


通过两个明确来完成
1,明确源和目的


源:输入流 InputStream Reader
目的:输出流 OutputStream Writer


2,操作的是否为纯文本


是:字符流
不是:字节流


3,当体系明确后,再明确要使用具体的哪个对象,通过设备进行区分


源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台


然后:需要提高效率吗?
是:BufferdReader


如果存储时,需要加入指定编码表,则用转换刘
所以需使用的对象是OutputStreamWriter
而该转换流对象需要接收一个字节输出流
而且还可以操作的文件的字节输出流,FileOutputStream


转换流什么时候使用呢


字符与字节的之间的桥梁,通常涉及到字符编码转换时,需要用到转换流。

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

原创粉丝点击