国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

IO流的【字節(jié)流】

2019-11-10 21:31:33
字體:
供稿:網(wǎng)友

IO流的【字節(jié)流】

一、InputStream中的讀取數(shù)據(jù)的方法如下:

  1 、int read()

  功能:讀取一個(gè)字節(jié)的數(shù)據(jù),并且返回讀到得數(shù)據(jù),如果返回-1,則表示讀到輸入流的末尾。

  2、int read(byte[] b)

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

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

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

  4、available()

  功能:返回此輸入流下一個(gè)方法調(diào)用可以不受阻塞地從此輸入流讀取或跳過的估計(jì)字節(jié)數(shù)。

  5、close()

  功能:關(guān)閉輸入流,釋放這個(gè)流的相關(guān)資源。

二、OutputStream中寫入數(shù)據(jù)的方法如下:

  1 、int write(int b)

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

  2、int write(byte[] b)

  功能:將指定的字節(jié)數(shù)組b寫入此輸入流。

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

  功能:將指定byte數(shù)組中從偏移量off開始的len個(gè)字節(jié)寫入輸入流。

  4、flush()

  功能:刷新此輸入流并強(qiáng)制寫出所有緩沖的輸出字節(jié)數(shù)。

  5、close()

  功能:關(guān)閉輸出流,釋放這個(gè)流的相關(guān)資源。

①字節(jié)數(shù)組輸入流:

     

package com.iotest;import java.io.ByteArrayInputStream;import java.io.IOException;public class ByteArryInputStreamDemo {    public static void main(String[] args) throws IOException {        String str = "abcdefghijk";        byte[] strBuf = str.getBytes();  //字符串轉(zhuǎn)換成字節(jié)數(shù)組        ByteArrayInputStream bais = new ByteArrayInputStream(strBuf);        int data = bais.read();          //從字節(jié)數(shù)組輸入流讀取字節(jié)        while(data!=-1){            char upper = Character.toUpperCase((char)data);            System.out.PRint(upper+" ");            data = bais.read();        }        bais.close();    }}

程序運(yùn)行結(jié)果:A B C D E F G H I J K

②字節(jié)數(shù)組輸出流:

package com.iotest;import java.io.ByteArrayOutputStream;import java.io.IOException;public class ByteArrayOutputStreamDemo {    public static void main(String[] args) throws IOException {        ByteArrayOutputStream baos = new ByteArrayOutputStream();        String s = "welcome to use ByteArrayOutputStreamDemo";        byte[] buf = s.getBytes();          baos.write(buf); //將指定的byte數(shù)組寫到字節(jié)數(shù)組輸出流中        System.out.println(baos.toString());  //將字節(jié)數(shù)組輸出流內(nèi)容轉(zhuǎn)換成字符串輸出        //將字節(jié)數(shù)組輸出流中的內(nèi)容復(fù)制到字節(jié)數(shù)組中        byte[] b = baos.toByteArray();        for (int i = 0; i < b.length; i++) {            System.out.print((char)b[i]);        }        baos.close();    }}程序運(yùn)行結(jié)果:welcome to use ByteArrayOutputStreamDemowelcome to use ByteArrayOutputStreamDemo

③文件輸入輸出流的使用

package com.iotest;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;//復(fù)制圖片public class FileInputStreamDemo {    public static void main(String[] args) throws IOException {        File file = new File("F://shar//test//logo17.gif");        FileInputStream fis = new FileInputStream(file); //創(chuàng)建一個(gè)輸入流        //創(chuàng)建一個(gè)輸出流,后面一個(gè)參數(shù)true表示追加,原有內(nèi)容不會(huì)被清除,默認(rèn)為false        FileOutputStream fos = new FileOutputStream("F://shar//test//logo18.gif",false);        int ch = 0;        //方式一        /*while((ch=fis.read()) != -1){            fos.write(ch);        }*/        //方式二        /*byte[] b = new byte[1024];        while((ch=fis.read(b)) != -1){            fos.write(b,0,ch);        }*/        //方式三        byte[] b = new byte[fis.available()];        fis.read(b); //首先把fis的內(nèi)容讀到字節(jié)數(shù)組b里面        fos.write(b);//再把字節(jié)數(shù)組b的內(nèi)容通過輸出流寫到指定文件        //關(guān)閉流        fos.close();        fis.close();    }}④管道流的使用:  一個(gè)PipedInputStream對(duì)象必須和一個(gè)PipedOutputStream對(duì)象進(jìn)行連接從而產(chǎn)生一個(gè)通信管道。通常一個(gè)線程從管道輸出流寫入數(shù)據(jù),另一個(gè)線程從管道輸入流中讀取數(shù)據(jù)。當(dāng)線程A執(zhí)行管道輸入流的read()方法時(shí),如果暫時(shí)沒有數(shù)據(jù),這個(gè)線程就會(huì)被阻塞,只有當(dāng)線程B想管道輸出流寫了數(shù)據(jù)后,線程A才會(huì)恢復(fù)運(yùn)行。

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();    }}⑤緩沖流的使用:

package com.iotest;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class TestPrime {    private BufferedInputStream bis = null;    private BufferedOutputStream bos = null;    String fileName = "F://shar//test//test2.txt";    static int s,p;    //判斷是否是質(zhì)數(shù)    public boolean isPrime(int n){        for(int i=2;i<=n/2;i++){            if(n%i == 0){                return false;            }        }        return true;    }    void printPrime(int m) throws IOException{        //將字節(jié)流轉(zhuǎn)緩沖流        bos = new BufferedOutputStream(new FileOutputStream(fileName));        int j = 0;        for (int i = 2; i < m; i++) {            if(isPrime(i)){                j++;                if(j%s == 0){                    String s = String.valueOf(i)+" ";                    bos.write(s.getBytes());                    bos.write("/r/n".getBytes());                }else{                    String s = String.valueOf(i)+" ";                    bos.write(s.getBytes());                }            }        }        bos.flush();        bos.close();    }    void getPrime() throws IOException{        //將字節(jié)流轉(zhuǎn)緩沖流        bis = new BufferedInputStream(new FileInputStream(fileName));        int c = bis.read();        while(c != -1){            char ch = (char)c;            System.out.print(ch);            c = bis.read();        }    }    /**     * @param args     * @throws IOException      */    public static void main(String[] args) throws IOException {        TestPrime t = new TestPrime();        p = 100;        s = 10;        t.printPrime(p);        t.getPrime();    }}

如果不用緩沖流的話,程序是讀一個(gè)數(shù)據(jù),寫一個(gè)數(shù)據(jù)。這樣在數(shù)據(jù)量大的程序中非常影響效率。 緩沖流作用是把數(shù)據(jù)先寫入緩沖區(qū),等緩沖區(qū)滿了,再把數(shù)據(jù)寫到文件里。這樣效率就大大提高了。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 木兰县| 仁寿县| 封丘县| 惠安县| 东乡县| 溧水县| 吴桥县| 延庆县| 平谷区| 湘潭县| 阿拉尔市| 克什克腾旗| 合肥市| 长岛县| 东兴市| 浦江县| 塘沽区| 云阳县| 剑川县| 漳平市| 衡水市| 毕节市| 桦南县| 浦北县| 乌兰浩特市| 探索| 东乡县| 科技| 黄平县| 海丰县| 拉萨市| 赤水市| 云霄县| 灵武市| 宁明县| 定边县| 黄石市| 白玉县| 大冶市| 南华县| 康平县|