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

資訊專欄INFORMATION COLUMN

JavaIO : 不同情境使用的流

yintaolaowanzi / 3147人閱讀

摘要:我們在前面已經(jīng)提到的幾種流就有它們的使用情境和和主要用于解決不限于純文本的二進制文件的輸入輸出情境。同時,如果使用帶有緩沖區(qū)的緩沖輸入輸出流的話會使得讀寫的效率更高,有助于更快地完成不限于純文本的二進制文件的讀寫。

不同情境的流:

流的種類很多,針對不同的IO數(shù)據(jù)交換情景我們可以選擇不同的流來完成任務(wù)。

我們在前面已經(jīng)提到的幾種流就有它們的使用情境:

1. FileInputStream和FileOutputStream

FileInputStream和FileOutputStream主要用于解決不限于純文本的二進制文件的輸入輸出情境。同時,如果使用帶有緩沖區(qū)的緩沖輸入輸出流的話會使得讀寫IO的效率更高,有助于更快地完成不限于純文本的二進制文件的讀寫。

public class FilesTest {
    public static void main(String[] args) throws IOException {
        FileInputStream fileInputStream = new FileInputStream(new File("1.png"));
        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
        FileOutputStream fileOutputStream = new FileOutputStream(new File("2.png"));
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
        byte[] buffer = new byte[1024];
        while(bufferedInputStream.read(buffer)!=-1){
            bufferedOutputStream.write(buffer);
        }
        bufferedInputStream.close();
        bufferedOutputStream.close();
        fileInputStream.close();
        fileOutputStream.close();
    }
}
2. FileReader和FileWriter

FileReader和FileWriter主要用于解決字符文本文件的讀寫,因為在這些流提供了很多有利于處理字符的方法來對字符進行豐富的處理。同樣的,如果使用帶有緩沖區(qū)的輸入輸出流同樣可以提高IO讀寫效率。

public class FilesTest {
public static void main(String[] args) throws IOException {
        FileReader fileReader = new FileReader(new File("1.txt"));
        FileWriter fileWriter = new FileWriter(new File("2.txt"));
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
        String haveRead;
        while((haveRead=bufferedReader.readLine())!=null){
        bufferedWriter.write(haveRead);
        }
        bufferedReader.close();
        bufferedWriter.close();
        fileWriter.close();
        fileReader.close();
    }
}
3. ByteArrayInputStream和ByteArrayOutputStream

內(nèi)存流的輸入輸出端不是IO文件而是內(nèi)存中的對象,使用方法和IO流一樣,一般使用內(nèi)存流直接向流中注入數(shù)據(jù)再傳到其他的IO文件中去或者把從IO文件中讀取的數(shù)據(jù)注入到內(nèi)存對象中去。

//創(chuàng)建與內(nèi)存對象相關(guān)聯(lián)的流,將內(nèi)存對象中的數(shù)據(jù)寫入到IO文件中去:

public class FilesTest {
public static void main(String[] args) throws IOException {
String temp = "abcd";

byte[] buffer = temp.getBytes();

ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(buffer);

FileOutputStream fileOutputStream = new FileOutputStream(new File("test.txt"));

byte[] swap = new byte[1024];

while(byteArrayInputStream.read(swap)!=-1){

fileOutputStream.write(swap);


}

byteArrayInputStream.close();

fileOutputStream.close();

    }
}

//創(chuàng)建與內(nèi)存對象相關(guān)聯(lián)的流,將IO對象中的數(shù)據(jù)寫入到內(nèi)存對象中去:

public class FilesTest {
public static void main(String[] args) throws IOException {
byte[] des = new byte[1024];

FileInputStream fileInputStream = new FileInputStream(new File("test.txt"));

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

while(fileInputStream.read(buffer)!=-1){

byteArrayOutputStream.write(buffer);


}

des = byteArrayOutputStream.toByteArray();

fileInputStream.close();

byteArrayOutputStream.close();

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

    }
}
4. System.in和System.out

作為非常重要的IO對象,標準輸入輸出System.in和System.out這一對對象同樣可以建立起關(guān)聯(lián)它們的流,這些流把標準輸入輸出設(shè)備中的數(shù)據(jù)作為源或目標,將這些數(shù)據(jù)和內(nèi)存中的程序交互。(可以把標準輸入輸出想成一般的文件,標準輸入就像是一個數(shù)據(jù)是即時寫入的文件,而標準輸出就像是一個數(shù)據(jù)是即時寫出的文件)

public class FilesTest {
    public static void main(String[] args) throws IOException {
        byte[] des = new byte[1024];
        DataInputStream dataInputStream = new DataInputStream(System.in);
        dataInputStream.read(des);
        DataOutputStream dataOutputStream = new DataOutputStream(System.out);
        dataOutputStream.write(des);
        dataInputStream.close();
        dataOutputStream.close();
    }
}
流的轉(zhuǎn)換

對于字節(jié)流和字符流也可以通過轉(zhuǎn)換的方法來靈活使用,也就是構(gòu)造字節(jié)流和字符流在同一個流對象鏈上就可以了,相當于字節(jié)流在直接和程序交互之前先將數(shù)據(jù)流到字符流里做一下處理。這個過程也可以使用專有的InputStreamReader和OutputStreamWriter來實現(xiàn):這個過程將FileInputStream流里的數(shù)據(jù)按一種編碼方式讀入InputStreamReader,然后按另一種編碼方式從OutputStreamWriter寫入到FileOutputStream中這個過程實現(xiàn)了對字符編碼的修改,是字符流的特征。

public class FilesTest {
    public static void main(String[] args) throws IOException {
        FileInputStream fileInputStream = new FileInputStream(new File("1.txt"));
        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"iso8859-1");
        FileOutputStream fileOutputStream = new FileOutputStream(new File("2.txt"));
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"utf-8");
        char[] buffer = new char[1024];
        while(inputStreamReader.read(buffer)!=-1){
            outputStreamWriter.write(buffer);
        }
        inputStreamReader.close();
        outputStreamWriter.close();
        fileInputStream.close();
        fileOutputStream.close();
    }
}

這個例子是對BufferReader進一步轉(zhuǎn)換的工具類Scanner的使用,在底層使用BufferReader的Scanner可以在緩沖區(qū)對數(shù)據(jù)進行暫存并進一步進行處理,比如按符號劃分:

public class FilesTest {
    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(new BufferedReader(new FileReader("test.txt")));) {
            scanner.useDelimiter("[,|^]");
            while (scanner.hasNext()) {
                System.out.println(scanner.next());
            }
            System.out.println("Done!");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

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

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

相關(guān)文章

  • JavaIOJavaIO輸入輸出流

    摘要:下面我們使用字節(jié)輸入輸出流來說明這個問題輸入流一般是由對象如建立的,當新建一個時,對象建立了一個包含有數(shù)據(jù)的管道其實就是我們所說的這個流并將對象存儲的數(shù)據(jù)輸入到管道中,因此管道里的數(shù)據(jù)流就是對象內(nèi)的數(shù)據(jù)。 流的原理: showImg(/img/bVqa89); 一連串有順序的數(shù)據(jù)系列可以看成是一個流。 輸入輸出流: 數(shù)據(jù)從IO輸入到程序的流是輸入流,數(shù)據(jù)從程序輸出到IO的流是輸出流。 ...

    CloudwiseAPM 評論0 收藏0
  • Java知識點總結(jié)(JavaIO-異常)

    摘要:知識點總結(jié)異常知識點總結(jié)異常為什么需要異常機制不是所有的問題都能在編譯時被發(fā)現(xiàn),有些問題在程序運行時才會暴露出來異常機制是面向?qū)ο蟮奶幚沓绦蛟谶\行時發(fā)生的狀況的手段使用異常機制不會打亂原有業(yè)務(wù)邏輯的用塊把可能出異常的代碼保護起來用一個 Java知識點總結(jié)(JavaIO-異常) @(Java知識點總結(jié))[Java, Java異常] [toc] 為什么需要異常機制 不是所有的問題都能在編譯...

    Near_Li 評論0 收藏0
  • Java知識點總結(jié)(JavaIO-File類)

    摘要:知識點總結(jié)類知識點總結(jié)類類可以進行創(chuàng)建和刪除文件等操作。使用一個類,則必須向類的構(gòu)造方法中傳遞一個文件路徑。 Java知識點總結(jié)(JavaIO-File類) @(Java知識點總結(jié))[Java, JavaIO] [toc] File類 File類可以進行創(chuàng)建和刪除文件等操作。使用一個File類,則必須向File類的構(gòu)造方法中傳遞一個文件路徑。 showImg(https://segme...

    KavenFan 評論0 收藏0
  • Java知識點總結(jié)(JavaIO-內(nèi)存操作流)

    摘要:知識點總結(jié)內(nèi)存操作流知識點總結(jié)前面所講的程序中輸入輸出都是從文件中來,當然也可以將輸出的位置設(shè)置在內(nèi)存上。將內(nèi)容寫入到內(nèi)存中。 Java知識點總結(jié)(JavaIO-內(nèi)存操作流) @(Java知識點總結(jié))[Java, JavaIO] [toc] showImg(https://segmentfault.com/img/bV82tm?w=753&h=275); 前面所講的程序中輸入、輸出都是...

    Half 評論0 收藏0
  • Java知識點總結(jié)(JavaIO- BufferedReader類 )

    摘要:知識點總結(jié)類知識點總結(jié)類用于從緩沖區(qū)中讀取內(nèi)容,所有的輸入字節(jié)數(shù)據(jù)都將放在緩沖區(qū)中中定義的構(gòu)造方法只能接收字符輸入流的實例,所以必須使用字符輸入流和字節(jié)輸入流的轉(zhuǎn)換類將字節(jié)輸入流轉(zhuǎn)變?yōu)樽址鳌? Java知識點總結(jié)(JavaIO- BufferedReader類) @(Java知識點總結(jié))[Java, JavaIO] [toc] showImg(https://segmentfault....

    alanoddsoff 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<