Java中的流(二)

上一篇文章通过字节流和字符流来总结流,这里通过节点流和处理流总结一下流的具体用法。

   节点流的分类:

Java中的流(二)_第1张图片

      节点流分别对File(文件),Array(内存中的一个数组),String(字符串),Pipe(管道)进行处理。

 

      处理流的分类:

Java中的流(二)_第2张图片

 

常用的处理流有:缓冲流,转换流,数据流,对象流,打印流。

             缓冲流:要套接在相应的字节流之上,对读写的数据提供了缓冲功能,提高了读写的效率,同时也增加了一些更方便方法。

            缓冲流的作用就像一个桶,原本的字节流是个水管,水管直接连到目的地,加了缓冲流之后,就是在水管下接了一个桶,等桶接满水后再倒入目的地。起到了缓冲的作用。这样就可以一次读到更多的数据,避免了频繁的读写硬盘。由于带了缓冲功能,所以就写数据的时候需要使用flush方法。

                            

import java.io.*;
public class TestBufferStream{
   public static void main(String[] args){
        try{
             BufferedWriter bw=new BufferedWriter(new FileWriter("F:\\Java\\IO\\dat.txt"));//在对写文件的字节流上套接上缓冲流
             BufferedReader br=new BufferedReader(new FileReader("F:\\Java\\IO\\dat.txt"));//在对读文件的字节流上套接上缓冲流
             String s=null;
             for(int i=1;i<=100;i++){
                s=String.valueOf(Math.random());//通过随机函数给s赋值
                bw.write(s);                    //将s写入到dat.txt文件中
                bw.newLine();                   //写入一个分行符。缓冲流比较好用的方法就是可以写入或读取一行的数据。
             }
             bw.flush();                        //使内存中的所有数据立刻写出,不再缓冲。
             while((s=br.readLine())!=null){    //按行读取文件内容
                System.out.println(s);
             }
             bw.close();                        //关闭处理流同时关闭里面的节点流。
             br.close();
            
        }
        catch(IOException e){
             e.printStackTrace();
        }
   }
}


                转换流:用与字节数据到字符数据之间的转化。InputStreamReader需要和InputStream套接,OutputStreamWriter需要和outputStream套接。

          数据流:DataInputStream 和DataOutputStream  提供将基础数据类型写入到文件中,或者读取出来,这个流的用处还是很大的,如果没有这种流的话,有一个long,本身只占8个字节,如果我要写入到文件,需要转成字符串,然后在转成字符数组,那空间会占用很多,但是有了这种流之后就很方便了,直接将这8个字节写到文件就可以了,既节约了内存空间也使程序写起来更加方便简单。但是读取的时候需要注意了,根据读取的数据类型,指针会往下移,所以你读的顺序必须要和写的顺序一致才能完成你正确的需求。否则就相当与把数据拆分了。

import java.io.*;
public class TestDataStream{
      public static void main(String[] args){
          ByteArrayOutputStream baos=new ByteArrayOutputStream();   //建一个节点流。
          DataOutputStream dos=new DataOutputStream(baos);          //在节点流上接一根数据流“管道”                                   try{
              dos.writeDouble(Math.random());                       //double型 ,占8个字节  
              dos.writeBoolean(true);                               //boolean型,占一个字节
              ByteArrayInputStream bais=new ByteArrayInputStream(baos.toByteArray());  
              System.out.println(bais.available());                 //输出流中总的可用字节数--9
              DataInputStream dis=new DataInputStream(bais);        //同样在输出流的外面接上数据流“管道”
              System.out.println(dis.readDouble());                 //直接读出double型的数
              System.out.println(dis.readBoolean());                //直接读出boolean型
              dos.close();
              dis.close();
          }catch(IOException e){
              e.printStackTrace();
          }

      }
}


 

               打印流:java.io中专门提供用于打印的流,这类流在写入的时候有自动flush的功能,所以不需要每打印一个东西都flush一次。

import java.io.*;
public class TestPrintStream1{
       public static void main(String[] args){
           PrintStream ps=null;
           try{
              FileOutputStream fos=new FileOutputStream("F:\\Java\\IO\\log.dat");//创建输出流,指定输出地点
              ps=new PrintStream(fos);                                           //在流外面包装打印流
           }catch(IOException e){
              e.printStackTrace();
           }
           if(ps!=null){
              System.setOut(ps);                                                 //将系统的打印设置成打印流ps
           }
           int ln=0;
           for(char c=0;c<=60000;c++){
               System.out.print(c+"  ");                                         //不在打印到dos窗口,输出流直接打印到指定文件中
               if(ln++>=100){
                     System.out.println();ln=0;
               }
           }
        }
}


 

你可能感兴趣的:(java,String,dos,null,Class,import)