java:IO流

流:
          输入流和输出流,字节流和字符流。
          输入和输出:基准是内存,
              数据进入内存:就叫输入
              输出写出内存:就叫输出
          下面所有的类,都属于java.io包下的。
          字节缓冲输入流和字节缓冲输出流作用:较少IO次数,提高IO的效率。
 


           
          字节输入流(InputStream抽象类)
              常用方法:
                  int read();//读取一个字节的数据,返回读取的数据,如果没有数据则返回-1
                  int read(byte[] b);//读取数据存入byte数组中,返回读取的长度。
                                      //如果没有数据则返回-1
                  void close();
  
              常用子类:FileInputStream
                  构造方法:
                      public FileInputStream(String pathname);
                      public FileInputStream(File pathname);

                   BufferedInputStream:
                  构造方法:
                      //调用下面这个构造方法的时候,底层会创建一个长度是8129的byte数组
                      //当第一次读取的时候,会读取数据存入该byte数组中
                      //然后从该数组对应位置获取元素,进行操作
                      public BufferedInputStream(InputStream is);
                      //下面这个构造方法可以自己指定缓冲区大小
                      public BufferedInputStream(InputStream is,int size);
 


  
          字节输出流(OutputStream抽象类):
              常用方法:
                  void write(int i);//写出一个字节的数据
                  void write(byte[] b);
                  void write(byte[] b,int offset,int len);
                  void flush();//刷新(清空)缓冲区。
                  void close();
  
              常用子类:FileOutputStream
                  构造方法:
                      //当参数的某一个目录不存在,会抛出FileNotFoundException
                      public FileOutputStream(String pathname);
                      public FileOutputStream(File pathname);
                      public FileOutputStream(String pathname,boolean append);
                      public FileOutputStream(File pathname,boolean append);
  
                      这四个构造方法其实底层最终使用的是第四个构造方法。
                      前面两个构造方法,布尔值参数默认是false(表示覆盖)
           注意事项:底层数据的传输来说只有字节流,没有字符流。

                   BufferedOutputStream:
                  构造方法:
                      //调用下面这个构造方法的时候,底层会创建一个长度是8192的byte数组
                      //当写出数据的时候,会被数据存储在这个8192的byte数组中
                      //当该数组存不下数据,或者显示的调用了flush(close)方法,会把缓冲区中的数据写出去
                      public BufferedOutputStream(OutputStream os);
                      //通过下面的构造方法,可以指定缓冲区的大小
                      public BufferedOutputStream(OutputStream os,int size);
 


 
      字符输入流(Reader抽象父类):
          常用方法:
              int read();//读取一个字符的数据,如果 没有读到数据则返回-1
              int read(char[] ch);//读取数据,存入char数组中,返回读取的长度,如果没有数据则返回-1
              void close();//释放资源
 
          常用子类:FileReader
              构造方法:
                  //调用下列构造方法的时候,底层会创建一个长度是8192的byte数组
                  //每次读取8192字节的数据(数据量大,数据量小有多少多多少)
                  public FileReader(String pahtname);
                  public FileReader(File pahtname);

                  BufferedReader:
                  构造方法:
                      //调用下面这个构造方法的时候,底层会创建一个长度是8192的char数组
                      //调用读取方法,把数据读取存入8192的byte数组
                      //把8192byte数组中的数据统一转换成字符存入8192的char数组中
                      //从char数组中的对应位置获取元素,进行操作
                      public BufferedReader(Reader r);
                      public BufferedReader(Reader r,int size);
  
                  //字符输入流和缓冲字符输入流读取数据,读取的次数是一样的
                  //高效体现在字节到字符的转换

                  OutputStreamWriter:
                  构造方法:
                      //使用默认的字符编码写出数据
                      public OutputStreamWriter(OutputStream os);
                      //使用自己指定的字符编码写出数据
                      public OutputStreamWriter(OutputStream os,String charsetName);


  
      字符输出流(Writer抽象父类):
          成员方法:
              void write(int b);//写出一个字符的数据
              void write(char[] ch);
              void write(char[] ch,int offset,int len);
              void write(String str);
              void write(String str,int offset,int len);
              void flush();//可以把缓冲区中的数据写出去
              void close();//关闭流,释放资源。在关闭流之前会把缓冲区中的数据写出去。
  
          常用子类:FileWriter
              构造方法://默认是false,表示覆盖
                  //调用下列构造方法,底层会创建一个长度是8192的byte数组(缓冲区)
                  //当缓冲区中的数据满了,存不下了会自动把缓冲区中的数据写出去
                  public FileWriter(String pathname);
                  public FileWriter(File pathname);
                  public FileWriter(String pathname,boolean append);
                  public FileWriter(File pathname,boolean append);


                BufferedWriter
                  构造方法:
                      //调用下面这个构造方法的时候,底层会创建一个长度是8192的char数组
                      //调用写出方法的时候,会把数据写出到8192的char数组中
                     //当8192的char数组存不下数据的时候,会同一进行转换(成byte),
                      //存储到8192的byte数组中,然后把8192byte数组中的数据写出去
                      public BufferedWriter(Writer w);
                      //调用下面这个构造方法可以自己指定缓冲区的大小
                      public BufferedWriter(Writer w,int size);
                  //字符缓冲输出流的高效体现在,字符到字节的转换上,写出次数这两种(FileWriter、BufferedWriter)是一样的

                OutputStreamWriter:
                  构造方法:
                      //使用默认的字符编码写出数据
                      public OutputStreamWriter(OutputStream os);
                      //使用自己指定的字符编码写出数据
                      public OutputStreamWriter(OutputStream os,String charsetName);


         对象输出流写出对象,序列化操作。
          
                  注意事项:
                      a.序列化的对象必须是Serializable类型
                      b.成员变量的类型也必须是Serializable类型
                      c.使用transient关键字修饰的成员变量不进行序列化
         
         对象输入流读数据进来转换成对象,反序列化操作
                  注意事项:
                      a.序列化后,类文件结构不能改变,如果改变了反序列化就会报错。
                          如果不能保证不修改类文件结构,则可以在该类中添加一个成员变量(常量):
                              serialVersionUID
        


        PrintStream:打印流
          成员方法:
             void println();
             void print(参数);
          构造方法:
              public PrintStream(String pathname);
              public PrintStream(File pathname);
 


public class Test04 {
    public static void main(String[] args) throws IOException {
        Reader r = new FileReader("b.txt");
        int data = r.read();//读取一个字符的数据,第一次读的时候,从磁盘中把数据读取存入到8192的byte数组中
                            //把该数组中对应位置(前两个字节)的数据转换成字符
        System.out.println(data);//字符
        r.read();//又读取一个字符的数据,把byte数组中对应位置(索引值2 3)的数据转换成字符
        r.read();//又读取一个字符的数据,把byte数组中对应位置(索引值4 5)的数据转换成字符
        r.close();
        
        InputStream is = new FileInputStream("b.txt");
        is.read();//从磁盘中读取一个字节,真的从磁盘中读取一个字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值