Day19第十九天 java基础 -------IO流

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

1、字符流中的缓冲区:缓冲区的出现时为了提高流的读取效率的,所以缓冲区出现前应该先有流对象。
2、缓冲原理:这个对象的里面是封装了数组是吧数组封装起来变成了对象,只要将需要被提高效率的
流的对象作为参数传递给缓冲区构造函数即可。
3、注意只要用到了缓冲区就要进行刷新。如果不进行刷新,缓冲区中的数据是不会进入到文件中的。
4、缓冲区关闭也就是关闭了缓冲区与之对应的对象,缓冲区关闭,与之对象的对象就关闭了。
5、newLine是换行的方法。在windows相当于\r\n在linux中相当于\n
newLine是缓冲区提供的一种跨平台的换行符。
6、在BufferedReader中有一个方法是readLIne是一次读取一行的方法。方便对文本数据进行获取,当
返回的是null时候就表示的是读取到了文件的末尾了。
7、注意:在是用readLine方法的时候是返回的是回车符号前面的数据,但是并不返回回车符号,所以
这样就需要在下面在进行加上一家一newLine 这个方法进行换行的操作。
8、readLine原理:无论是读取一行汉是读取多个字符其实做种是在应哦按上一个一个的读取数据,所以
最终使用的还是read()方法。一次读取一个的方法,而readLine意识就是临时的把数据都存储起来,
有回车符号的就是一行数据每次遇到回车符就把数据返回回来,read方法是度歉意一个返回一个,与之
最大的区别就是没有吧数据临时的存放起来。
示例代码:

public String MyBufferefReader
{
 StringBuilder sb = new StringBuilder();
 int ch = 0;
 while((ch==sb.read())!=-1)
 {
  if(ch=='\r')
  {
   continue;
  }
  if(ch=='\n')
  {
   return sb.toString();//如果读到了回车就返回数据
  }
  else
  {
   sb.append((char)ch);
  }
  return null;
 }
}



如果没有回车的话就要添加一行代码是:

if(sb.length()!=0)
     {
             return sb.toString();
     }



9、装饰设计模式:当想要对已有的对象进行增强的时候可以定义一个类将已有的对象传入
基于已有对象的功能,并提供更加强的功能,呢么自定义该方法就称为装饰类
10、在装饰模式中要被修饰的类以参数的形式传递给增强的类这样就需要在增强类中定义带有
参数的构造方法而参数就是那个被修饰的类,
11、装饰类通常会通过构造方法来接受被修饰的对象,并比喻被修饰的对象的功能提出更强的
功能,
12、装饰类和继承的区别:
 装饰模式比继承更加灵活是为了避免继承体系用的臃肿,继而降低了类与类之间的关系。
13、注意装饰类是因为增强了已有对象具备的功能,只不过是提供了更加强的功能,所以装饰类
和被修饰的类通常都属于同一个体系中。
14、自定义的包装类在继承时候一定要重写抽象方法。
15、LineNumberReader是帮有行号的装饰类。其中getNumberReadersetNumberReader分别
是设置或获取其实点
16、字节流:两个基类: InputStreamOutputStream
其实字符流走的也是字节流,只不够是先把数据存储起来,字符流底层页是用的字节流的缓冲区
字符缓冲区有个数组,是用来临时存放数据的所以的需要刷新的动作。如果是用字节来操作的话
没有缓冲区的情况下是不需要刷新动作的。
17、复制一个图片 是从一个源文件中读取到字节数组中取在存储到目标数组中去。read方法在做提升动作
而write方法在做强制转换动作。
18、字符流四个:FileReader FileWriter BufferedReader BufferedWriter
19、字节流四个:FileInpuStream FileOutputStream  BufferedInpuStream BufferedOutputStream
20、
读取键盘录入:
 System.out:对应的标准的输出设备,控制台。
 System.in:对应的标准输入设备,键盘
 read方法是一个阻塞方法,没有键盘的输入就不会有控制台的输出。
21、重要代码:

 InputStream in = System.in;
  int i = in.read();
  System.out.println((char)i);


 

 通过以上的代码可以看出,从键盘输入一行数据并打印出来其实就是读取到一行数据的原理
 也就是readLine readLine方法是字符流BufferedReader类方法
 而键盘录入的read方法也就是字节流中的InputStream类方法,那么是不能讲字节流转成字符
 流的在使用字符流缓冲区的readLine
22、读取转换流:是在字符流中的一个类InputStreamReader
    写入转换流:OutputStreamWriter   在使用写入和读取转换流的时候一定记住 要进行刷新动作
    因为是在缓冲区中的
23、重要语句:
 读取键盘录入的语句

  

BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in))



 写入语句:
  

BufferedWriter bfw = new BufferedWriter(new OutputStreamWtiter(System.out))



24、流操作的基本规律:
 1,明确源和目的。
 源:输入流。InputStream  Reader
 目的:输出流。OutputStream  Writer
 2,操作的数据是否是纯文本。
 是:字符流。
 不是:字节流。
 3,当体系明确后,在明确要使用哪个具体的对象。
 通过设备来进行区分:
 源设备:内存,硬盘。键盘
 目的设备:内存,硬盘,控制台。

 

 1、源:键盘录入。
 目的:控制台。

 2,需求:想把键盘录入的数据存储到一个文件中。
 源:键盘。
 目的:文件。

 3,需求:想要将一个文件的数据打印在控制台上。
 源:文件。
 目的:控制台。

 流操作的基本规律:
 最痛苦的就是流对象有很多,不知道该用哪一个。

 通过三个明确来完成。
25、字符流的好处:是查完码表后可以直接返回一个中文。日志信息的录入会用到PrintStackTrace的
重载方法用new PrintStream就可以了
26、转换集可以创建指的是字符集,吧字节转换后查码表,存储是如果要加入指定的码表,而指定的码表
只有转换流可以指定,所以要使用独享的OutputStreamWriter而该转换流的对象要接受一个字节输出流,而
且还可以操作文件的字节输出流FileOutputStream,如果不转换码表的话就可以使用FileWriter了 通常是
字节和字符的编码转换的时候使用到了转换流。

 

你可能感兴趣的:(java基础)