黑马程序员_java中的io流(1)

 ------- android培训java培训、期待与您交流! ----------


一、 1 )io中的字符流基类:Reader与Writer:操作文本、字符、字符串时使用。首先看一下如何以流的形式将文本数据写入和读取:
FileWriter fw=new FileWriter("demo.txt");//创建一个FileWriter对象,该对象已初始化就必须要明确要操作的文件,而且,文件会被会被创建到指定目录下,如果该目录下已有同名文件,将被覆盖。如果不想覆盖已有的文件,想在文件的末尾处进行文件的续写,就需要为该方法传递一个“true”参数即可,如:FileWriter fw=new FileWriter("demo.txt",true).
fw.write("abcde");//调用write方法,将数据写入到流中。
fw.flush();//刷新流对象中的数据,将数据刷到目的地。
FileReader fr=new FileReader("demo.txt");//创建一个文件读取流对象,和指定的名称相关联,要保证此文件是存在的,如果不存在,会发生FlieNotFoundException
fw.close();//关闭流资源,关闭之前,会将流中的数据刷新到目的地。和flush的区别:flush刷新后,流可继续使用,close刷新后,会将流关闭。
2)io中 的字节流基类:InputStream与OutputStream,用于操作字节数据以及二进制数据使用;比如,操作图片数据,MP3等;
字节流中的读取和写入数据的方法与字符流大同小异。可以参考字符流的方法。
思考:字节流中的读一个字节的read()方法的返回值类型不是byte而是int?
因为读取过程中有可能读到连续8个1的情况,8个1对应的十进制就是-1,而-1是流在读取数据循环结束的标记,这样就会发生数据还没读完,就结束读取的情况,为了避免这种情况,将读到的字节进行int类型的提升,并在保留源字节数据的情况下,前面补了24个0,变成了int类型的值,而在写入数据时,只写该int类型数据的最低8位。
二、流中的缓冲区(BufferedWriter和BufferedReader):流中的read和write方法都是对数据的单个操作,一次读一个写一个,效率太低,BufferedWriter和BufferedReader通过对读到数据的缓存,读取一堆,最后一起写入目的地,从而,提高对数据的高效读取。该缓冲区还提供了一次读一行的方法readLine(),方便于对文本数据的获取,当此方法返回null时,表示读到文件末尾。
readLine()方法的原理:无论一次读取一个,还是一次读一行,获取读取的多个字符,其实底层都是read()方法的一个个的读取,readLine()就是对read()方法进行功能增强后的装饰。
三、装饰设计模式:当想对已有的对象进行功能增强时,可以自定义类,将已有的对象以参数的形式传入,基于已有的功能,并提供加强功能,那么,自定义的该类就称为装饰类。装饰类通常会通过构造方法接受被装饰的对象,并基于被装饰的对象的功能提供更强的功能。
装饰和继承的区别:1)以前通过继承让每一个子类都具备缓冲功能,那么继承体系会很复杂,并不利于扩展。
2)现在优化思想,单独描述一下缓冲的内容,将需要被缓冲的对象传递进来,谁需要被缓冲,谁就作为参数传递给缓冲区,这样,继承体系就变得简单,优化了体系结构。
3)装饰比继承要灵活,避免了继承体系的臃肿,而且,降低了类与类之间的关系。
4)装饰类因为是增强已有对象,具备的功能和已有的是相同的,只不过是提供了更强的功能,,所以,装饰类和被装饰的类是属于同一个体系结构的。
四、读取键盘录入:System.in对应的是标准的输入设备:控制台。它是inputStream类的对象。
 System.out对应的是标准的输出设备:键盘。它是outputStream类的对象。
为了使inputStream类的System.in 对象可以使用BufferedReader缓冲区中的readLine()方法,就用到了字节流和字符流之间转换到的转换流InputStreamReader和OutputStreamWriter,它们是字节和字符之间的桥梁。同时,转换流中是可以指定编码表的。
通过转换流,涉及键盘录入时 的最常用的写法:
BufferedWriter out=new BufferedWriter(new OutputStreamWriter(System.out));
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
通过 BufferedWriter和BufferedReader对OutputStreamWriter和 InputStreamReader的包装,使得代码变得简洁而又高效。
五、流操作的基本规律:
1)明确源和目的:
源:输入流,InputStream,Reader
目的:输出流,OutputStream,Writer
2)明确操作的数据是否是纯文本:
是:字符流
否:字节流
3)明确体系后,在明确使用哪个具体的对象,通过设备来进行区分:
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台

 ------- android培训java培训、期待与您交流! ----------




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值