zoukankan      html  css  js  c++  java
  • 输入流:
    输入流最抽象类:InputStream,Reader。他们是抽象类,定义了输入流的所有通用的方法。
    InputStream:字节输入流(流的单位是8位字节)
    Reader:字符输入流(流的单位是字符)
    read方法:
    InputStream中定有三个read方法:
    int read(); //读取一个字节
    int read(byte[] b); //读取byte[]等长个字节的数据,存放到byte[]中。
    int read(byte[] b , int off , int len) ; //读取len长度,存放到byte[]中,从byte[off]开始存放。返回读取的数量
    Reader中的三个read方法基本和InputStream相同,只不过单位是字符。
    int read();
    int read(char[] c);
    int read(char[] c , int off , int len);
    除了read方法还有一些关于操作流指针的方法:
    FileInputStream和FileReader:
    InputStream和Reader是抽象类,FileInputStream和FileReader是实现的子类之一:
    他们属于节点流(连接源和目的两个节点)数据源是文件。
    注意:
    1:如果使用字节流读取存放了GBK中文的文件,输出时会出现乱码,原因是一个GBK是两字节,字节流一次只读1个字节
    2:流资源使用后需要关闭,javaGC只清除内存资源,流资源不是。最好写在Finally{}中。
    FileReader Demo:
     1 package demo;
     2 import java.io.*;
     3 public class Demo {
     4     public static void main(String[] args) throws IOException {
     5         FileReader fr = null;
     6         try{
     7             //创建输入流
     8             fr = new FileReader("F:"+File.separator+"test.text");
     9             //创建一个接受字符的数组char[32]
    10             char [] cbuf = new char[32];
    11             //记录获取到的字符个数:
    12             int readLen = 0;
    13             //循环输入:
    14             while((readLen = fr.read(cbuf)) > 0){
    15                 System.out.println("获取到的数据"+new String(cbuf,0,readLen));
    16             }
    17         }catch (IOException ioe){
    18             ioe.printStackTrace();
    19         }finally {
    20             if(fr != null){
    21                 fr.close();
    22             }
    23         }
    24     }
    25 }
    //文件字节输入流类似
    输出流:
      OutPutStream 和 Writer
    输出流和输入非常类似,他们也提供了三了类似的方法:
    void write(int c); //将指定的字节或者字符放到输出流中。
    void write(byte[]/cahr[] buf); //将制定的字节数组/字符数组放到流中。
    void write(byte[]/char[] buf ,int off ,ing len); //制定字节字符数组的指定长度方法流中。
    ***由于字节流传出的是Byte[]所以可以直接使用 void write(String str)和void write(String str , int off ,int len)
    Demo:
     1 package demo;
     2 import java.io.*;
     3 public class Demo {
     4 //    使用输入流和输出流实现复制文件
     5     public static void main(String[] args) throws IOException {
     6         FileInputStream fileInputStream = null;
     7         FileOutputStream fileOutputStream = null;
     8         try {
     9             fileInputStream = new FileInputStream("F:"+File.separator+"File"+File.separator+"test.txt");
    10             fileOutputStream = new FileOutputStream("F:"+File.separator+"File"+File.separator+"copy.txt");
    11             byte[] buf = new byte[32];
    12             int readCount;
    13             while((readCount = fileInputStream.read(buf)) > 0){
    14 //            将读取到的数据写到输出流中。
    15                 fileOutputStream.write(buf,0,readCount);
    16             }
    17         } catch (FileNotFoundException e) {
    18             e.printStackTrace();
    19         } catch (IOException e) {
    20             e.printStackTrace();
    21         }finally {
    22             if(fileInputStream != null){
    23                 fileInputStream.close();
    24             }
    25             if(fileOutputStream != null){
    26                 fileOutputStream.close();
    27             }
    28         }
    29     }
    30 }
    处理流:
    由于字符流和字节流使用比较麻烦,实际使用时我们需要借助处理流。
    使用处理流可以忽略底层设备之间的差异,使程序员只关心输入输出的方法。
    典型的使用思路是:处理流封装节点流,和设备交互的任务又节点流执行,程序通过处理流来指定输入输出操作。(创建处理流是会传入一个节点流)
    例如:PrintStream 就是OutPutStream的一种实现。
    关闭了处理流,处理流封装的流自动关闭。
    Demo:
    package demo;
    import java.io.*;
    public class Demo {
        public static void main(String[] args){
            PrintStream printStream = null;
            try{
                //创建一个节点流。
                FileOutputStream fileOutputStream = new FileOutputStream("F:\File\copy.txt");
                //使用处理流封装这个节点流。
                printStream = new PrintStream(fileOutputStream);
                //使用处理流提供的简单的方法。
                printStream.print("这句话是使用printStream的print方法输出的。");
            }catch (IOException ioe){}
            finally {
                if(printStream != null){
                    //关闭处理流,节点流自动关闭
                    printStream.close();
                }
            }
        }
    }
    java 流体系介绍:
    java流体系规律性很强:
    输入流:字节输入流,字符输入流
    输出流:字节输出流,字符输出流。
    节点输入输出流,处理输入输出流。
    如图:
        
    文件输入输出流、字符创输入输出流、数组输入输出流:以文件、字符串、数组为源的流。
    管道流:用于实现进程之前通信。
    缓冲流:使用缓冲功能,提高了输入输出的效率,但是要使用flush()方法将管道中的内容刷出。
    对象流:实现对象的序列化。
    上图中的流只是java.io包中。java还有一些比较特殊的流用于处理影音、压缩/解压、加密/解密。
    
    


  • 相关阅读:
    关于同步解释
    dll 问题 (转)
    SQL SERVER 触发器中如何调用外部程序
    SQL SERVER所有表、字段名、主键、类型、长度、小数位数等信息
    variant 和 Stream 的互換
    Variant的相关函数
    使用 wxPython 创建“目录树”(5)
    wxPython 绘图演示——模拟雷达信号图(2)
    wxpython 实现简易画板(1)
    使用 wx.tools.img2py (4)
  • 原文地址:https://www.cnblogs.com/Xmingzi/p/8337137.html
Copyright © 2011-2022 走看看