现在的位置: 首页 > 综合 > 正文

黑马程序员_IO流技术总结

2018年02月17日 ⁄ 综合 ⁄ 共 4619字 ⁄ 字号 评论关闭

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

IO技术总结
IO-->Input+Output的简写
IO流用来处理设备之间的传输Java对数据的操作是通过流的方式
流按照操作数据分为两种:字节流和字符流
 unicode码表无论什么字符都是两个字节
 utf-8码表优化了unicode码表一个字符对应三个字节
字节流--其中无论什么数据字节流都可以读取
字符流--为了能识别很多的中文和其他字符
流按流向分为:输入流和输出流
-->在一台机器上存储一串字符使用GBK编码而又在另一台机器上读取这个
字符串然后本机的编码是UTF-8那么就会出现乱码这时候就要用字符流去写
去读
==========================================================
字节流的抽象基类:
InputStream,OutputStream
字符流的抽象基类:
Reader,Writer
注意:由四个基类派伸出来的子雷鸣的都是由其父类作为子类名的后缀
IO体系:
 字符流:(既然IO流用于操作数据那么数据的最常见的体现形式是
 文件)
   FileWriter fiw=new FileWriter("");
   fiw.write("文本数据");//将数据写入到六种
   fiw.flush();//将数据数据刷到目的地中
   fiw.close();//关闭流资源但是关闭之前会刷新一次
   内部的缓冲数据
   /*
      close和flush的区别:flush刷新后流可以继续使用
      close刷新后会将流关闭。
   */
   FileWriter fiw=new FileWriter("1.txt",true);//这个
   构造函数是不覆盖原有文件在源文件后面追加数
   据
-->Java本身不能去往硬盘去写数据索所以Java靠系统内部的方式来完成数
据的书写这些方式都是在使用windows的资源在使用完后要释放数来所以
Java一定要使用close方法来释放资源
 //字符流都有编码格式:默认的编码格式
 //windows简体中文版默认是GBK所以字符流都有编码格式也是GBK
 FileReader fr=new FileReader("1.txt");
 //要保证要读取的文件存在否则会抛出异常
 //int ch=fr,read();//一次读一个字符而且会自动往下读取到达末
 尾会返回-1
 while((ch=fr.read())!=-1){
        System.out.println((char)ch);
 }
 ********************************************
 //通过第二种方式通过字符数组进行读取
 FileReader fr=new FileReader("1.txt");
 //定义一个字符数组用于储存独到的字符;
 //char[] buffer=new char[10];
 //int num=br.read(buffer)//此方法如果督导文件最后一个字符也会
 把上一次读到的剩下9个字符也打印出来(此处在以前是我再学习
 遇到的一个小坎困扰了很长时间)
 所以上面的部分代码改为一下:
 int num=0;
 char[] buffer=new char[1024];//一次读取1KB的字符
 while((num=fr.read(buffer))!=-1){
  System.out.println(new String(buffer,0,num));
 }
----------------------------------其实IO中的对象的大部分方法跟上面类似
下面制作简单的介绍
 BufferedReader br=new BufferreReader();
 BufferedWriter  br=new BufferedWriter();
 由Reader类拓展而来提供通用的缓冲方式读取而且提供了很实用的
 readLine读取分行文本很适合
 /*
  BufferedReader(Reader in)
          创建一个使用默认大小输入缓冲区的缓冲字符输入流

   BufferedWriter(Writer out)
          创建一个使用默认大小输出缓冲区的缓冲字符输出流
 */
 例如: BufferedReader br=new BufferedReader(new ileReader(""));
  将一个文本文件先将一定量的字符放在缓冲区中
  BufferedWriter bw=new BufferedWriter(new FileWriter(""));
  将存在缓冲区中的数据在批量取过来
  BufferedReader br = new BufferedReader(new
  InputStreamReader(new FileInputStream("ming.txt")));
        String data = null;
        while((data = br.readLine())!=null)
        {
          System.out.println(data);
        }
  
----------------------------------------------------------------
  转换流:字节流+编码表。
 InputStreamReader:字节-->字符
 OutputStreamWriter: 字符-->字节
 /*
 这个很重要
 */
 讲一个字节流通过自动编码转换成一个字符流打印输出等
 用法:InputStreamReader in=new InputStreamReader(new
 FileInputStream("1.txt"));
  OutputStreamWriter out=new OutputStreamWriter(new
  FileOutputStream("2.txt"));
  int len=0;
  while((len=in.read())!=-1){
   out.write((char)len);
  }
  in.close();
  out.close();
----------------------------------字节流:---------------------------
  **字节流就是二进制流计算机的数据都是用二进制来表示
  处理任何数据都可以用字节流
  FileOutputStream//文件输出流
  FileInputStream//文件输入流
   FileInputStream fis=new FileInputStream("1.txt");
   FileOutputStream fos=new FileOutputStream("12.txt");
   byte[] buffer=new byte[1024];
   int num;
   while((num=fis.read(buffer))!=-1){ 
   //System.out.println(new String(buffer,0,num));
    fos.write(buffer, 0, num);
   
   }
   fis.close();
   fos.close();
---------------------------------------------------------------------
   //字节流缓冲区类似于字符流缓冲区需要人工编码
   BufferedInputStream
   BufferedOutputStream
   例子:-->加快了留在读数据和取数据的速度
   BufferedInputStream in=new BufferedInputStream(new
   FileInputStream("1.txt"));
  BufferedOutputStream out=new BufferedOutputStream(new
  FileOutputStream("100.txt"));
  int len;
  while((len=in.read())!=-1){
   out.write(len);
  }
  in.close();
  out.close();
-------------------------------------------------------------------------
   打印流
   PrintStream
    PrintStream(OutputStream out, boolean
    autoFlush)
   PrintWriter pw=new printWriter(OutputStrea
   out,true);
    PrintWriter(OutputStream out, boolean
    autoFlush)
   //这两个对象操作的效果如出一辙但是PrintStream
   主要是用来操作字节流而printwriter是用来操作字
   符流
   而且用PrintWriter对象的println(Object obj)是自动
   清空缓冲区+加换行
----------------------------------------------------------------
================================================================
流对象很多在平时的开发当中到底用哪一个
流对象的才操作规律:
四个明确组成:
 1明确 源和目的
     源:读入inputStream Reader
     目的:outputStream Writer
 2.明确数据内容是否是纯文本:
   是:reader
   不是:InputStream
 3.明确数据所在设备
  源设备
   硬盘:File流
   内存:数组 byteArrayInputStream
   键盘:System.in
   网络:Scoket
  目的设备:
   硬盘:File流
   内存:数组 byteArrayOutputStream
   显示(控制台):System.out
   网络:Scoket
 4.额外功能
  1.高效:Buffer
  2.转换
  3.对象序列化 ObjectInputStream ObjectOutputstream
  4.保证数据的表现形式 DataInputStream DataOutputStream
   write(int)//将int的最低位写入
   writeInt(int)//将int的四个字节全部写入

             
 
   

 ----------------------
android培训
java培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net/heima

 

抱歉!评论已关闭.