字節流

|-- InputStream(讀)數組

|-- OutputStream(寫)jvm

 

因爲字節是二進制數據,因此字節流能夠操做任何類型的數據,值得注意的是字符流使用的是字符數組char[]而字節流使用的是字節數組byte[]。下面來看一個字節流讀寫文件的簡單例子。spa

清單7,使用字節流讀寫文本文件代碼   xml

private static void test5(){ 對象

    FileOutputStream fos=null; 圖片

    try{ 內存

        fos=new FileOutputStream("D:/test.txt"); it

        fos.write(0010);//寫入二進制數據 io

        fos.flush(); test

    }catch(IOException e){ 

         

    }finally{ 

        try{ 

            fos.close(); 

        }catch(IOException ex){ 

             

        } 

    } 

    FileInputStream fis=null; 

    try{ 

        fis=new FileInputStream("D:/test.txt"); 

        //fis.available()是獲取關聯文件的字節數,即test.txt的字節數 

        //這樣建立的數組大小就和文件大小恰好相等 

        //這樣作的缺點就是文件過大時,可能超出jvm的內存空間,從而形成內存溢出 

        byte[] buf=new byte[fis.available()]; 

        fis.read(buf); 

        System.out.println(new String(buf)); 

    }catch(IOException e){ 

         

    }finally{ 

        try{ 

            fos.close(); 

        }catch(IOException ex){ 

             

        } 

    } 

 

清單8,使用緩衝區對一張圖片進行復制代碼   

private static void test6(){ 

    BufferedOutputStream bos=null; 

    BufferedInputStream bis=null; 

    try{ 

        //前面已經說過了,緩衝對象是根據具體的流對象建立的,因此必需要有流對象  

        bis=new BufferedInputStream(new FileInputStream("E:\\images\\wo\\1.jpg")); 

        //寫入目標地址 

        bos=new BufferedOutputStream(new FileOutputStream("E:\\test.jpg")); 

        byte[] buf=new byte[1024]; 

        while((bis.read(buf))!=-1){ 

            bos.write(buf); 

        } 

        bos.flush(); 

    }catch(IOException e){ 

        e.toString(); 

    }finally{ 

        try{ 

            if(bos!=null){ 

                bos.close(); 

            } 

            if(bis!=null){ 

                bis.close(); 

            } 

        }catch(IOException ex){ 

            ex.toString(); 

        } 

    } 

相關文章
相關標籤/搜索