zoukankan      html  css  js  c++  java
  • Java中的流

    一、Java中流的原理

        流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以“流”的方式进行。设备可以是文件,网络,内存等。

        四种基本流InputStream,OutputStream,Reader,Writer又分别有更具体的子类,分为文件流,缓冲流,数据流,转换流,Print流,Object流等,都分别有特定的功能或用来操作特定的数据。

    二、字节流

        2.1 InputStream

            继承自InputStream的流用于向程序中输入数据,且数据的单位是8bit。

            

            代码示例:

     1 public static void main(String[] args) throws IOException{
     2         
     3         File f=new File("f:\a.txt");
     4         if(f.exists()){
     5             System.out.println("文件存在");
     6         }else{
     7             f.createNewFile();//用于创建文件
     8             //f.setReadOnly();
     9             System.out.println(f.getName()+"文件是否可读:"+f.canRead());
    10             System.out.println(f.getName()+"文件是否可写:"+f.canWrite());
    11         }
    12         
    13         InputStream in=new FileInputStream(f);
    14         int data=in.read();
    15         while(data!=-1)
    16         {
    17             char e = (char)data;
    18             System.out.print(e + "  ");
    19             data = in.read(); 
    20         }
    21         
    22     }

            read()方法是一个字节一个字节地往外读,每读取一个字节,就处理一个字节。read(byte[] buffer)方法读取数据时,先把读取到的数据填满这个byte[]类型的数组buffer(buffer是内存里面的一块缓冲区),然后再处理数组里面的数据。

        2.2、OutputStream

            OutputStream和InputStream相对应为字节输出流,用于向外部设备例如文件中写数据

            

            代码示例:

     1 File f=new File("f:\a.txt");
     2         if(f.exists()){
     3             System.out.println("文件存在");
     4         }else{
     5             f.createNewFile();//用于创建文件
     6             //f.setReadOnly();
     7             System.out.println(f.getName()+"文件是否可读:"+f.canRead());
     8             System.out.println(f.getName()+"文件是否可写:"+f.canWrite());
     9         }
    10         
    11         OutputStream out=new FileOutputStream(f);
    12         String str="Hello world!";
    13         byte[] b=str.getBytes();
    14         out.write(b);
    15         out.flush();
    16         out.close();

            write(byte[] b):将 b.length 个字节从指定的 byte 数组写入此输出流。

            write(byte[] b, int off, int len):将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

            write(int b):将指定的字节写入此输出流,b为ascll码。

         

        2.3、字节缓冲流

    三、字符流

        字节流和字符流的区别就是读取方式一个为按字节读取,一个是按字符读取。在读取文件想对文件内容进行处理,比如修改某一行的时候一般使用字符流,二仅仅是读取文件一般使用字节流。

        3.1、Reader流和writer流

        代码示例:

     1 import java.io.File;
     2 import java.io.FileReader;
     3 import java.io.FileWriter;
     4 import java.io.IOException;
     5 
     6 public class wr {
     7     
     8     public static void main(String[] args) throws IOException{
     9         File f=new File("f:\a.txt");
    10         if(f.exists()){
    11             System.out.println("文件存在");
    12         }else{
    13             f.createNewFile();//用于创建文件
    14             //f.setReadOnly();
    15             System.out.println(f.getName()+"文件是否可读:"+f.canRead());
    16             System.out.println(f.getName()+"文件是否可写:"+f.canWrite());
    17         }
    18         
    19         FileWriter fw  = new FileWriter(f);
    20         String str="asdw";
    21         fw.write(str);//向文件中写入asdw
    22         fw.write(str,0,2);//向文件中写入as
    23         char c='a';
    24         fw.write(c);//向文件中写入a
    25         fw.flush();//使用字符流必须要对缓存进行刷新才能向文件中写入内容
    26         fw.close();//调用close()函数时自动对缓存进行刷新
    27         //注意,OutputStream中还有append()方法可以对文件内容进行追加输出,详见Java API。
    28         
    29         FileReader fr = new FileReader(f);
    30         int b=0,num=0;
    31         while((b = fr.read())!= -1){
    32             System.out.print((char)b );
    33             num++;
    34         }
    35         System.out.println("输出了"+num+"个字符!");
    36     }
    37 
    38 }

        3.2 字符缓冲流

            带有缓冲区的,缓冲区(Buffer)就是内存里面的一小块区域,读写数据时都是先把数据放到这块缓冲区域里面,最后对缓冲区内容统一操作,减少io对硬盘的访问次数,保护我们的硬盘。

             -BufferedWriter bw = new BufferedWriteer(fw);

             -BufferedReader br = new BufferedReader(fr);

     1 import java.io.BufferedReader;
     2 import java.io.BufferedWriter;
     3 import java.io.File;
     4 import java.io.FileReader;
     5 import java.io.FileWriter;
     6 
     7 public class Buffertry {
     8 
     9     public static void main(String args[]){
    10         
    11         try{
    12             File f=new File("f:\a.txt");
    13             if(f.exists()){
    14                 System.out.println("文件存在");
    15             }else{
    16                 f.createNewFile();//用于创建文件
    17                 //f.setReadOnly();
    18                 System.out.println(f.getName()+"文件是否可读:"+f.canRead());
    19                 System.out.println(f.getName()+"文件是否可写:"+f.canWrite());
    20             }
    21             
    22             BufferedWriter bw = new BufferedWriter(new FileWriter(f));
    23             String s = null;
    24             for(int i=0;i<100;i++){
    25                 s = String.valueOf(Math.random());//“Math.random()”将会生成一系列介于0~1之间的随机数。 
    26                 bw.write(s);
    27                 bw.newLine();//调用newLine()方法使得每写入一个随机数就换行显示
    28             }
    29             bw.flush();//调用flush()方法清空缓冲区
    30             
    31         BufferedReader br = new BufferedReader(new FileReader(f));
    32             while((s = br.readLine())!=null){
    33                 //使用BufferedReader处理流里面提供String readLine()方法读取文件中的数据时是一行一行读取的
    34                 System.out.println(s);
    35             }
    36         bw.close();
    37         br.close();
    38         }catch(Exception e){
    39             e.printStackTrace();
    40         }
    41     }
    42 }

        3.3、转换流

            字节输入流转换为字符输入流:InputStreamReader是字节流转化为字符流的桥梁,它将字节去出并且按照指定方式解码为字符,构造方法为

                InputStreamReader(InputStream in);//详见Java API

            字节输出流转换为字符输出流:OutputStreamWriter继承自Writer,可以将指定写入流中的字符编码为字节

                OutputStreamWriter(OutputStream out);//详见Java API

     1 import java.io.BufferedReader;
     2 import java.io.IOException;
     3 import java.io.InputStreamReader;
     4 
     5 public class changetry {
     6     
     7     public static void main(String[] args) throws IOException{
     8         
     9         InputStreamReader isr=new InputStreamReader(System.in);
    10         BufferedReader br = new BufferedReader(isr);
    11         System.out.println("请输入:");
    12         String str=br.readLine();
    13         System.out.println("输入内容:"+str);
    14         
    15     }
    16 
    17 }
    1         File f=new File("f:\a.txt");
    2         FileOutputStream fos = new FileOutputStream(f);  
    3         OutputStreamWriter os = new OutputStreamWriter(fos);  
    4         BufferedWriter bos = new BufferedWriter(os);  
    5         bos.write("hahahaha");
    6         bos.close();  
    7         os.close();  
    8         fos.close();  
  • 相关阅读:
    ContentProvider总结2
    ContentProvider总结
    ContentObserver的使用完整详细示例
    性能优化之Java(Android)代码优化
    联系人数据库contacts2.db介绍
    contact2.db最强详解
    Android Uri、UriMatcher、ContentUris详解
    Android三种ContentResolver查询方式
    Oracle SQL_杂记
    啥是Restful?
  • 原文地址:https://www.cnblogs.com/z-belief/p/5259036.html
Copyright © 2011-2022 走看看