成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java I/O流

jerry / 971人閱讀

摘要:文件的讀寫是流常用的也是最基礎(chǔ)的操作,然而字節(jié)流,字符流,,,等等,各種各樣的流操作類傻傻分不清楚,今天我們就對(duì)常用的流操作做簡(jiǎn)單的總結(jié)。

文件的讀寫是java i/o流常用的也是最基礎(chǔ)的操作,然而字節(jié)流,字符流,InputStream,OutpurStream,Reader,Writer等等,各種各樣的流操作類傻傻分不清楚,今天我們就對(duì)常用的流操作做簡(jiǎn)單的總結(jié)。本文力求簡(jiǎn)潔,不至于看到大量的代碼覺(jué)得困倦。

字節(jié)流/字符流表
分類 字節(jié)輸入流 字節(jié)輸出流 字符輸入流 字符輸出流
抽象基類 InputStream OutputStream Reader Writer
訪問(wèn)文件 FileInputStream FileOutputStream FileReader FileWriter
訪問(wèn)數(shù)組 ByteArrayInputStream BiteArrayOutputStream CharArrayReader CharArrayWriter
訪問(wèn)管道 PipedInputStream PipedOutputStream PipedReader PipedWriter
訪問(wèn)字符串 StringReader StringWriter
緩沖流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
轉(zhuǎn)換流 InputStreamReader OutputStreamWriter
對(duì)象流 ObjectInputStream ObjectOutputStream
抽象基類 FilterInputStream FilterOutputStream FilterReader FilterWriter
打印流 PrintStream PrintWriter
推回輸入流 PushbackInputStream PushbackReader
特殊流 DataInputStream DataOutputStream

其中基類都是抽象類,不同的子類對(duì)應(yīng)不同的用途
首先我們看一下字節(jié)流與字符流的不同之處

字節(jié)流是由字節(jié)組成的,字符流是由字符組成的. Java里字符由兩個(gè)字節(jié)組成.字節(jié)流是最基本的,所有的InputStream和OutputStream的子類都是,主要用在處理二進(jìn)制數(shù)據(jù),它是按字節(jié)來(lái)處理的但實(shí)際中很多的數(shù)據(jù)是文本,又提出了字符流的概念,它是按虛擬機(jī)的encode來(lái)處理,也就是要進(jìn)行字符集的轉(zhuǎn)化。

通俗的來(lái)講,字節(jié)流就是二進(jìn)制流,通常的圖片,視頻,音頻文件都可以通過(guò)字節(jié)流來(lái)讀寫,字符流就是字符串,中文字符,等unicode字符編碼后的字符集。字節(jié)流可以通過(guò)轉(zhuǎn)換流(即InputStreamReader,InputStreamWriter)轉(zhuǎn)換為字符流(轉(zhuǎn)化的過(guò)程就是編碼的過(guò)程),緩沖流是為了提高讀寫效率提供的類,可以開辟出一個(gè)緩沖區(qū)用于高速存取數(shù)據(jù)流(分別對(duì)應(yīng)字節(jié)流和字符流)。

字節(jié)流讀寫文件的實(shí)例
public class FileCopy {
    public void fileCopy(String sourceFile,String targetFile) throws IOException{
        FileInputStream in=new FileInputStream(sourceFile);
        FileOutputStream out=new FileOutputStream(targetFile);
        byte[] buffer=new byte[2048];//創(chuàng)建2048個(gè)字節(jié)大小的緩沖區(qū)(可根據(jù)拷貝文件大小自行定義)
        int value;
        while((value=in.read(buffer))!=-1){//循環(huán)讀寫
            out.write(buffer, 0, value);
        }
                if(in!=null)in.close();//關(guān)閉i/o流
                if(out!=null)out.close();
    }
    public static void main(String[] args) throws IOException {
        String in="readFile.txt";
        String out="outFile.txt";
        FileCopy f=new FileCopy();
        f.fileCopy(in, out);
    }
}
字節(jié)流轉(zhuǎn)字符流實(shí)例

文件拷貝不推薦用這種方法,此方法僅作為字節(jié)流轉(zhuǎn)字符流的實(shí)例,因?yàn)樵谖募opy中字節(jié)流轉(zhuǎn)化為字符流讀寫的意義不大,而且會(huì)降低運(yùn)行效率

public class FileCopy {
    public void fileCopy(String sourceFile,String targetFile) throws IOException{
        FileInputStream in=new FileInputStream(sourceFile);
        FileOutputStream out=new FileOutputStream(targetFile);
        BufferedReader reader=new BufferedReader(new InputStreamReader(in));
        BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(out));
        String line="";
        StringBuffer result=new StringBuffer();
        while((line=reader.readLine())!=null){
            writer.write(line);//此處的write是將數(shù)據(jù)寫入緩沖區(qū),并沒(méi)有寫入文件
            writer.flush();//將緩沖區(qū)數(shù)據(jù)寫入文件
        }
        if(writer!=null)writer.close();
        if(reader!=null)reader.close();
    }
    public static void main(String[] args) throws IOException {
        String in="readFile.txt";
        String out="outFile.txt";
        FileCopy f=new FileCopy();
        f.fileCopy(in, out);
        System.out.println("hell java");
    }
}

關(guān)鍵在于這兩行

BufferedReader reader=new BufferedReader(new InputStreamReader(in));
BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(out));

將FileInputStream作為參數(shù)傳入InputStreamReader中然后作為參數(shù)傳給BufferedReader,其中InputStreamReader作為Reader的子類傳入

更多關(guān)于java的文章請(qǐng)戳這里:(您的留言意見(jiàn)是對(duì)我最大的支持)

我的文章列表

Email:[email protected]

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66956.html

相關(guān)文章

  • 高薪程序員&面試題精講系列22之說(shuō)說(shuō)JavaIO,常用哪些IO?

    摘要:一面試題及剖析今日面試題今天壹哥帶各位復(fù)習(xí)一塊可能會(huì)令初學(xué)者比較頭疼的內(nèi)容,起碼當(dāng)時(shí)讓我很有些頭疼的內(nèi)容,那就是流。在這里壹哥會(huì)從兩部分展開介紹流,即與流。除此之外盡量使用字節(jié)流。關(guān)閉此輸入流并釋放與流相關(guān)聯(lián)的任何系統(tǒng)資源。 一. 面試題及剖析 1. 今日面試題 今天 壹哥 帶各位復(fù)習(xí)一塊可...

    fnngj 評(píng)論0 收藏0
  • 如何理解I/O多路復(fù)用

    摘要:為了講清復(fù)用的是什么,首先得先說(shuō)明一下邏輯流的概念。理解了這個(gè),那么所謂的復(fù)用,指的就是在一個(gè)邏輯流里處理多個(gè)事件如何做到利用多路復(fù)用器,輪詢監(jiān)聽(tīng)各路,如果一旦有事件發(fā)生,那么就去處理,否則程序阻塞。 java nio提供了一套稱為I/O多路復(fù)用的編程范式,那么什么叫做I/O多路復(fù)用呢?所謂的I/O多路復(fù)用,從字面意思上來(lái)理解,就是:有多個(gè)I/O操作(或是寫,或是讀,或是請(qǐng)求),這多個(gè)...

    desdik 評(píng)論0 收藏0
  • Java? 教程(字符

    字符流 Java平臺(tái)使用Unicode約定存儲(chǔ)字符值,字符流I/O自動(dòng)將此內(nèi)部格式與本地字符集進(jìn)行轉(zhuǎn)換,在Western語(yǔ)言環(huán)境中,本地字符集通常是ASCII的8位超集。 對(duì)于大多數(shù)應(yīng)用程序,具有字符流的I/O并不比具有字節(jié)流的I/O復(fù)雜,使用流類完成的輸入和輸出會(huì)自動(dòng)轉(zhuǎn)換為本地字符集和從本地字符集轉(zhuǎn)換,使用字符流代替字節(jié)流的程序會(huì)自動(dòng)適應(yīng)本地字符集并為國(guó)際化做了準(zhǔn)備 — 所有這些都無(wú)需程序員的額...

    mochixuan 評(píng)論0 收藏0
  • Java I/O簡(jiǎn)介

    摘要:如果不指定字符集,則使用系統(tǒng)默認(rèn)字符編碼,系統(tǒng)的默認(rèn)字符編碼一般是。所以更準(zhǔn)確的說(shuō),是將一個(gè)字節(jié)輸入流按照給定的字符編碼來(lái)解碼,從而得到一個(gè)字符輸入流。當(dāng)然,缺點(diǎn)就是不能選擇使用的字符編碼。 相對(duì)于Python和 C來(lái)說(shuō),Java的I/O操作API比較復(fù)雜,因此本文打算做個(gè)簡(jiǎn)單的介紹。 1. I/O分類 總的來(lái)說(shuō)Java的I/O按照處理數(shù)據(jù)的粒度和方向來(lái)劃分,一共可以分為4類: 基...

    darkbug 評(píng)論0 收藏0
  • Java? 教程(I/O

    I/O流 I/O流表示輸入源或輸出目標(biāo),流可以表示許多不同類型的源和目標(biāo),包括磁盤文件、設(shè)備、其他程序和內(nèi)存數(shù)組。 流支持許多不同類型的數(shù)據(jù),包括簡(jiǎn)單字節(jié)、原始數(shù)據(jù)類型、本地化字符和對(duì)象,有些流只是傳遞數(shù)據(jù),其他人以有用的方式操縱和轉(zhuǎn)換數(shù)據(jù)。 無(wú)論它們?nèi)绾卧趦?nèi)部工作,所有流都為使用它們的程序提供相同的簡(jiǎn)單模型:流是一系列數(shù)據(jù),程序使用輸入流從源讀取數(shù)據(jù),一次一個(gè)條目: showImg(https:...

    JerryWangSAP 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<