麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

java筆記七:IO流之字節流與字節緩沖流

2019-11-17 03:27:30
字體:
來源:轉載
供稿:網友

  在I/O類庫中,java.io.InputStream和java.io.OutputStream分別表示字節輸入流和字節輸出流,它們都是抽象類,不能實例化,數據流中的最小單位是字節,所以叫做字節流。

  

一、InputStream中的讀取數據的方法如下:

  1 、int read()

  功能:讀取一個字節的數據,并且返回讀到得數據,如果返回-1,則表示讀到輸入流的末尾。

  2、int read(byte[] b)

  功能:從輸入流中讀取一定量的字節,并將其存儲在字節數組b中,返回實際讀取的字節數,如果返回-1,則表示讀到輸入流的末尾。

  3、int read(byte[] b, int off, int len)

  功能:將數據讀入一個字節數組,同時返回讀取的實際字節數,如果返回-1,則表示讀到輸入流的末尾。off指定在數組b中存放數據的起始偏移位置,len指定讀取的最大字節數。

  4、available()

  功能:返回此輸入流下一個方法調用可以不受阻塞地從此輸入流讀取或跳過的估計字節數。

  5、close()

  功能:關閉輸入流,釋放這個流的相關資源。

二、OutputStream中寫入數據的方法如下:

  1 、int write(int b)

  功能:將b的最低的一個字節寫入此輸入流,其他三個字節丟棄。

  2、int write(byte[] b)

  功能:將指定的字節數組b寫入此輸入流。

  3、int write(byte[] b, int off, int len)

  功能:將指定byte數組中從偏移量off開始的len個字節寫入輸入流。

  4、flush()

  功能:刷新此輸入流并強制寫出所有緩沖的輸出字節數。

  5、close()

  功能:關閉輸出流,釋放這個流的相關資源。

①字節數組輸入流:

復制代碼
 1 package com.iotest; 2  3 import java.io.ByteArrayInputStream; 4 import java.io.IOException; 5 public class ByteArryInputStreamDemo { 6     public static void main(String[] args) throws IOException { 7         String str = "abcdefghijk"; 8         byte[] strBuf = str.getBytes();  //字符串轉換成字節數組 9         ByteArrayInputStream bais = new ByteArrayInputStream(strBuf);10         int data = bais.read();          //從字節數組輸入流讀取字節11         while(data!=-1){12             char upper = Character.toUpperCase((char)data);13             System.out.);14             data = bais.read();15         }16         bais.close();17     }18 }
復制代碼

程序運行結果:A B C D E F G H I J K

②字節數組輸出流:

復制代碼
 1 package com.iotest; 2  3 import java.io.ByteArrayOutputStream; 4 import java.io.IOException; 5  6 public class ByteArrayOutputStreamDemo { 7     public static void main(String[] args) throws IOException { 8         ByteArrayOutputStream baos = new ByteArrayOutputStream(); 9         String s = "welcome to use ByteArrayOutputStreamDemo";10         byte[] buf = s.getBytes();  11         baos.write(buf); //將指定的byte數組寫到字節數組輸出流中12         System.out.println(baos.toString());  //將字節數組輸出流內容轉換成字符串輸出13         //將字節數組輸出流中的內容復制到字節數組中14         byte[] b = baos.toByteArray();15         for (int i = 0; i < b.length; i++) {16             System.out.print((char)b[i]);17         }18         baos.close();19     }20 }
復制代碼

程序運行結果:
welcome to use ByteArrayOutputStreamDemo
welcome to use ByteArrayOutputStreamDemo

③文件輸入輸出流的使用

復制代碼
 1 package com.iotest; 2  3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 //復制圖片 9 public class FileInputStreamDemo {10     public static void main(String[] args) throws IOException {11         File file = new File("F://shar//test//logo17.gif");12         FileInputStream fis = new FileInputStream(file); //創建一個輸入流13         //創建一個輸出流,后面一個參數true表示追加,原有內容不會被清除,默認為false14         FileOutputStream fos = new FileOutputStream("F://shar//test//logo18.gif",false);15         int ch = 0;16         //方式一17         /*while((ch=fis.read()) != -1){18             fos.write(ch);19         }*/20         //方式二21         /*byte[] b = new byte[1024];22         while((ch=fis.read(b)) != -1){23             fos.write(b,0,ch);24         }*/25         //方式三26         byte[] b = new byte[fis.available()];27         fis.read(b); //首先把fis的內容讀到字節數組b里面28         fos.write(b);//再把字節數組b的內容通過輸出流寫到指定文件29         //關閉流30         fos.close();31         fis.close();32     }33 34 }
復制代碼

④管道流的使用:
  一個PipedInputStream對象必須和一個PipedOutputStream對象進行連接從而產生一個通信管道。通常一個線程從管道輸出流寫入數據,另一個線程從管道輸入流中讀取數據。當線程A執行管道輸入流的read()方法時,如果暫時沒有數據,這個線程就會被阻塞,只有當線程B想管道輸出流寫了數據后,線程A才會恢復運行。

復制代碼
package com.iotest;import java.io.IOException;import java.io.PipedInputStream;import java.io.PipedOutputStream;/* * 管道流 */class Sender extends Thread{    private PipedOutputStream out = new PipedOutputStream();    public PipedOutputStream getOut() {        return out;    }    @Override    public void run() {        String s = "hello world";        try {            out.write(s.getBytes());            out.close();        } catch (Exception e) {            // TODO: handle exception        }    }}public class Receiver extends Thread{    private PipedInputStream in;    public Receiver(Sender sender) throws IOException {        in = new PipedInputStream(sender.getOut());    }    @Override    public void run() {        try {            int data;            while((data=in.read())!=-1){                System.out.print((char)data);            }            in.close();        } catch (Exception e) {            // TODO: handle exception        }    }    public static void main(String[] args) throws IOException {        Sender sender = new Sender();        Receiver r = new Receiver(sender);        sender.start();        r.start();    }}
復制代碼


⑤緩沖流的使用:

復制代碼
 1 package com.iotest; 2  3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.FileOutputStream; 8 import java.io.IOException; 9 10 public class TestPrime {11     private BufferedInputStream bis = null;12     private BufferedOutputStream bos = null;13     String fileName = "F://shar//test//test2.txt";14     static int s,p;15     //判斷是否是質數16     public boolean isPrime(int n){17         for(int i=2;i<=n/2;i++){18             if(n%i == 0){19                 return false;20             }21         }22         return true;23     }24     void printPrime(int m) throws IOException{25         //將字節流轉緩沖流26         bos = new BufferedOutputStream(new FileOutputStream(fileName));27         int j = 0;28         for (int i = 2; i < m; i++) {29             if(isPrime(i)){30                 j++;31                 if(j%s == 0){32                     String s = String.valueOf(i)+" ";33                     bos.write(s.getBytes());34                     bos.write("/r/n".getBytes());35                 }else{36                     String s = String.valueOf(i)+" ";37                     bos.write(s.getBytes());38                 }39             }40         }41         bos.flush();42         bos.close();43     }44     void getPrime() throws IOException{45         //將字節流轉緩沖流46         bis = new BufferedInputStream(new FileInputStream(fileName));47         int c = bis.read();48         while(c != -1){49             char ch = (char)c;50             System.out.print(ch);51             c = bis.read();52         }53     }54     /**55      * @param args56      * @throws IOException 57      */58     public static void main(String[] args) throws IOException {59         TestPrime t = new TestPrime();60         p = 100;61         s = 10;62         t.printPrime(p);63         t.getPrime();64     }65 66 }
復制代碼
如果不用緩沖流的話,程序是讀一個數據,寫一個數據。這樣在數據量大的程序中非常影響效率。 緩沖流作用是把數據先寫入緩沖區,等緩沖區滿了,再把數據寫到文件里。這樣效率就大大提高了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久亚洲美女视频 | 黄网站在线免费看 | 欧美黄色大片免费观看 | 欧美一级做a | 日产精品久久久一区二区开放时间 | 亚洲成人第一区 | 日本在线播放一区二区三区 | 国产精品夜色视频一级区 | 久久亚洲国产午夜精品理论片 | 久久精品.com | 日韩av电影在线观看 | 久久久久久艹 | 欧美日韩国产一区二区三区在线观看 | 国内性爱视频 | 亚洲国产视频在线 | 日韩美香港a一级毛片免费 日韩激情 | 一级做a爱片久久毛片a高清 | 精品国产一区二区亚洲人成毛片 | 国产精品成aⅴ人片在线观看 | 精品一区在线视频 | 午夜精品成人 | 欧美乱码精品一区 | 羞羞视频免费视频欧美 | a视频在线播放 | 深夜激情视频 | 久久精品女人天堂av | 国产一级淫片在线观看 | 欧美1区2区 | 羞羞草视频 | 日本精品视频一区二区三区四区 | 天天草天天色 | 免费观看又色又爽又黄的崩锅 | 亚洲欧美一区二区三区在线观看 | 在线观看免费精品 | 龙的两根好大拔不出去h | 伊人午夜视频 | 成人毛片视频在线观看 | 国产成人精品免费视频大全办公室 | 毛片视频免费观看 | 久久999精品久久久 国产噜噜噜噜久久久久久久久 | 国产精品一区二区三区在线 |