Buffer Stream- BufferReader & BufferWriter

今天学学封装流,相当于缓冲区 ,目的很简单就是减少硬盘读写次数,提高efficiency

另外 学习一个 Buffer-Stream  的 newLine()  方法,本质就是 封装了 判断  '\n' 而已

 1 import java.io.*;
 2 
 3 
 4 
 5 /**
 6  * Created by wojia on 2017/7/7.
 7  */
 8 public class BufferStreamDemo {
 9     public static void main(String args[]) throws Exception {
10         /**
11          * 练习 buffer stream 进行封装 节点流 InputStream and OutputStream
12          * */
13 
14         //1.create a BufferStream , 8192 byte in default
15         BufferedWriter bis = new BufferedWriter( new FileWriter( "E:/test/test.txt") );
16         //8192 times
17         for (int i = 0 ; i < 8190; i++){
18         bis.write('A');}
19         bis.close();
20         //create a inputstream
21         InputStream in = new FileInputStream("E:/test/test.txt");
22         // create a bufferinputstream
23         BufferedInputStream bin = new BufferedInputStream(in);
24         byte[] buffer = new byte[1024];
25         int length = -1;
26         /**length = .. 这个判断语句是必须的 因为 byte[] (包括字符流的reader ) 输入流不一样为1024 大小 所以会有空位置
27          * 直接system out 会出现 空格(就是数组中的空),因此 还 需要 new String( buffer, 0, length ) 字节流多大就打印多长
28          * */
29         /**当然 java 包里 的<Buffer></buffer> stream也提供了
30          * readline方法,同样具备 如此功能 
31          * */
32         while((length = in.read( buffer ))!= -1) System.out.println( new String( buffer, 0, length ) );
33      bin.close(); 
34     }
35 }

 2017/07/08更新:

试验时发现 使用 reader(char[]) 和  InputStream(byte[] ) 都能够把文本文档的内容copy到副本去 

但其实也会存在问题 , 例如 若所复制的字节流中 有中文和英文并存 且 有逗号等字节符号,则可能会出现

一个表示一个汉字的字符被len = read(byte[]) 时,由于buffer的设定大小问题,使得字符被拆分开两次copy,从而出现乱码

至于 java库中的reader字符流方法如何区分 单字节的符号 和 汉字的字符不同大小  暂时不太懂

posted on 2017-07-08 11:10  吸毒术士柯震东  阅读(274)  评论(0编辑  收藏  举报

导航