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字符流方法如何区分 单字节的符号 和 汉字的字符不同大小 暂时不太懂