黑马程序员_Java_IO流(二)

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

字符流的缓冲区: 
 
                   缓冲区的出现提高了对流的操作效率。
 
                   原理:其实就是将数组进行封装。
 
                   对应的对象:

BufferedWriter:特有方法: 
 
                    newLine():跨平台的换行符。
 
BufferedReader: 特有方法: 
 
                   readLine():一次读一行,到行标记时,将行标记之前的字符数据作为字符串返 
                   回。当读到末尾时,返回 null。
 
 
在使用缓冲区对象时,要明确,缓冲的存在是为了增强流的功能而存在,所以在建立缓冲区对象时,要先有流对象存在。
 
其实缓冲内部就是在使用流对象的方法, 只不过加入了数组对数据进行了临时存储。

 为了提高操作数据的效率。

 

代码上的体现: 
           写入缓冲区对象: 


                //建立缓冲区对象必须把流对象作为参数传递给缓冲区的构造函数。 
 
                  BufferedWriter bufw = new BufferedWriter(new FileWriter("buf.txt")); 
 
                  bufw.write("abce");//将数据写入到了缓冲区。 
 
                  bufw.flush();//对缓冲区的数据进行刷新。将数据刷到目的地中。 
 
                  bufw.close();//关闭缓冲区,其实关闭的是被包装在内部的流对象.读取缓冲区对象:
 
                BufferedReader bufr = new BufferedReader(new FileReader("buf.txt")); 
 
                String line = null; 
 
                //按照行的形式取出数据。取出的每一个行数据不包含回车符。 
 
                 while((line=bufr.readLine())!=null) 
 
                 { 
                      System.out.println(line); 
                 } 
                 bufr.close();

 

readLine():方法的原理: 
 
                   其实缓冲区中的该方法,用的还是与缓冲区关联的流对象的 read 方法。 
                   只不过,每一次读到一个字符,先不进行具体操作,先进行临时存储。 
                   当读取到回车标记时,将临时容器中存储的数据一次性返回。

 

字节流: 
 
               抽象基类:InputStream,OutputStream。 
 
              字节流可以操作任何数据。 
 
              注意:字符流使用的数组是字符数组。char [] chs 
              字节流使用的数组是字节数组。byte [] bt 
 
               FileOutputStream fos = new FileOutputStream("a.txt"); 
 
               fos.write("abcde");//直接将数据写入到了目的地。 
 
               fos.close();//只关闭资源。 
 
                FileInputStream fis = new FileInputStream("a.txt"); 
 
               //fis.available();//获取关联的文件的字节数。 
 
               //如果文件体积不是很大,可以这样操作。 
 
                byte[] buf = new byte[fis.available()];//创建一个刚刚好的缓冲区。 
 
               //但是这有一个弊端,就是文件过大,大小超出 jvm 的内容空间时,会内存溢出。  
 
                 fis.read(buf); 
               System.out.println(new String(buf));

 

示例:用字节缓冲流复制一张图片,代码如下:

                BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("1.jpg")); 
 
                BufferedOutputStream bufos =  new BufferedOutputStream(new FileOutptStream("2.jpg")); 
 
                int by = 0; 
 
                 while((by=bufis.read())!=-1) 
                 { 
                      bufos.write(by); 
                 } 
 
                 bufos.close(); 
                 bufis.close();

 

转换流:
      特点:
 
                1,是字节流和字符流之间的桥梁。
 
                2,该流对象中可以对读取到的字节数据进行指定编码表的编码转换。 
 
    什么时候使用呢? 
                1,当字节和字符之间有转换动作时。
 
                2,流操作的数据需要进行编码表的指定时。 
 
具体的对象体现:
 
                1,InputStreamReader:字节到字符的桥梁。
 
                2,OutputStreamWriter:字符到字节的桥梁。

                这两个流对象是字符流体系中的成员。 
 
               那么它们有转换作用,而本身又是字符流。所以在构造的时候,需要传入字节流对象进来。

 

可以和流相关联的集合对象 Properties. 
 
Map 
        |--Hashtable 
                  |--Properties
 
Properties:该集合不需要泛型,因为该集合中的键值对都是 String 类型。 
 
         1,存入键值对:setProperty(key,value);
 
         2,获取指定键对应的值:value getProperty(key);
 
          3,获取集合中所有键元素: 
 
                      Enumeration  propertyNames(); 
 
在 jdk1.6 版本给该类提供一个新的方法。 
 
                Set<String> stringPropertyNames();
 
4,列出该集合中的所有键值对,可以通过参数打印流指定列出到的目的地。 
 
                list(PrintStream); 
 
                list(PrintWriter); 
 
                例:list(System.out):将集合中的键值对打印到控制台。 
 
                list(new PrintStream("prop.txt")):将集合中的键值对存储到 prop.txt 文件中。
 
5,可以将流中的规则数据加载进行集合,并称为键值对。 
 
               load(InputStream): 
 
               jdk1.6 版本。提供了新的方法。 
 
                          load(Reader): 
 
注意:流中的数据要是 "键=值" 的规则数据。
 
6,可以将集合中的数据进行指定目的的存储。 
 
               store(OutputStram,String comment)方法。 
 
              jdk1.6 版本。提供了新的方法。 
 
                        store(Writer ,String comment): 
 
使用该方法存储时,会带着当时存储的时间。

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值