黑马程序员---JAVA基础---IO(十二)

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

 

二、缓冲区
缓冲区的出现是为了提高数据的读写的效率即流的操作效率而出现的。所以在创建缓冲区之前,必须要先有流对象。缓冲区需要结合流才可以使用。在流的基础上对流功能进行了增强。
1、BufferedWriter:字符写入流的缓冲区
该缓冲区中提供了一个跨平台的换行符。newLine();

import java.io.*;
class  BufferedWriterDemo
{
 public static void main(String[] args) throws IOException
 {
 //创建一个字符写入流对象。
FileWriter fw = new FileWriter("buf.txt");
  //为了提高字符写入流效率。加入了缓冲技术。
//只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
BufferedWriter bufw = new BufferedWriter(fw);
  for(int x=1; x<5; x++)
 {
 bufw.write("abcd"+x);
 bufw.newLine();
 bufw.flush();
 }
  //记住,只要用到缓冲区,就要记得刷新。
//bufw.flush();
  //其实关闭缓冲区,就是在关闭缓冲区中的流对象。
bufw.close();
 }
}


 

2、BufferedReader:字符读取流缓冲区
该缓冲区提供了一个一次读一行的方法 readLine,方便于对文本数据的获取。当返回null时,表示读到文件末尾。readLine方法返回的时候只返回回车符之前的数据内容。并不返回回车符。

 

import java.io.*;
class  BufferedReaderDemo
{
 public static void main(String[] args) throws IOException
 {
 //创建一个读取流对象和文件相关联。
FileReader fr = new FileReader("buf.txt");
  //为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。
BufferedReader bufr = new BufferedReader(fr);
  String line = null;
  while((line=bufr.readLine())!=null)
 {
 System.out.print(line);
 }
}
}


 

3、装饰设计模式
(1)当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类称为装饰类。装饰类通常会通过构造方法接收被装饰的对象。并基于被装饰的对象的功能,提供更强的功能。
(2)装饰和继承的区别:装饰模式要比继承更灵活,避免了体系臃肿,而且降低了类与类之间的关系。   
装饰类因为增强了已有对象,具备的功能和已有的是相同的,只不过提供了更强的功能,所以装饰类和被装饰类通常是属于一个体系中的。

三、字节流
1、复制一个图片
思路:
(1)用字节读取流对象和图片关联。
(2)用字节写入流对象创建一个图片文件。用于存储获取到的图片数据。
(3)通过循环读写,完成数据的存储。
(4)闭资源。

import java.io.*;
class  CopyPic
{
 public static void main(String[] args) 
{
 FileOutputStream fos = null;//用来存储图片数据
FileInputStream fis = null;
 try
 {
 fos = new FileOutputStream("c:\\2.bmp");//与图片相关联
fis = new FileInputStream("c:\\1.bmp");
   byte[] buf = new byte[1024];
   int len = 0;
   while((len=fis.read(buf))!=-1)
 {
 fos.write(buf,0,len);
 }
 }
 catch (IOException e)
 {
 throw new RuntimeException("复制文件失败");
 }
finally
 {
 try
 {
 if(fis!=null)
 fis.close();
 }
 catch (IOException e)
 {
 throw new RuntimeException("读取关闭失败");
 }
try
 {
 if(fos!=null)
 fos.close();
 }
 catch (IOException e)
 {
 throw new RuntimeException("写入关闭失败");
 }
 }
 }
}


 

2、键盘录入最常见的写法:
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

 

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值