最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java超詳細(xì)梳理IO流的使用方法上

 更新時間:2022年04月28日 08:50:38   作者:orangemilk_  
流(Stream)是指一連串的數(shù)據(jù)(字符或字節(jié)),是以先進(jìn)先出的方式發(fā)送信息的通道,數(shù)據(jù)源發(fā)送的數(shù)據(jù)經(jīng)過這個通道到達(dá)目的地,按流向區(qū)分為輸入流和輸出流

你要學(xué)會:

  • 流的概念
  • 處理字節(jié)流的類
  • 處理字符流的類
  • Java標(biāo)準(zhǔn)輸入輸出
  • 文件管理類

Java語言的輸入輸出類庫

1.流的概念

流是指計(jì)算機(jī)各部件之間的數(shù)據(jù)流動??梢允窃嫉亩M(jìn)制數(shù)據(jù),也可以是編碼后的特定數(shù)據(jù)。

2.流的分類

按照數(shù)據(jù)的傳輸方法,流分為輸出流和輸入流。按照內(nèi)容區(qū)分為字節(jié)流和字符流。

3.流的作用

用戶可以通過流來讀寫數(shù)據(jù)。

輸入輸出流

Java中把不同的輸入輸出源(文件,屏幕,鍵盤等)抽象為流,輸入輸出的數(shù)據(jù)稱為數(shù)據(jù)流,數(shù)據(jù)流是Java程序接收和發(fā)送數(shù)據(jù)的一個通道。把數(shù)據(jù)從鍵盤等外設(shè)傳遞到程序稱為輸入流,輸入流只能從其讀取數(shù)據(jù)而不能向其寫入數(shù)據(jù),輸出流類似。

數(shù)據(jù)的接收和發(fā)送都是沿著數(shù)據(jù)序列順序進(jìn)行的,每一個數(shù)據(jù)都要等待前面的數(shù)據(jù)讀入或者送出才能進(jìn)行讀寫。

緩沖流

數(shù)據(jù)流中的每次操作都是以字節(jié)為單位的,為了提高數(shù)據(jù)傳輸效率,通常使用緩沖流。緩沖流就是為一個已有的流配上一個緩沖區(qū)。例如寫入數(shù)據(jù)時,數(shù)據(jù)會先發(fā)送到緩沖區(qū),當(dāng)緩沖區(qū)滿時,在發(fā)送到外部設(shè)備。

4.輸入輸出流類庫

  • Java語言的輸入輸出流都封裝在java.io包中,使用前要先導(dǎo)包。用戶可以選擇包里的不同的流類實(shí)現(xiàn)各種數(shù)據(jù)的輸入輸出。其中字節(jié)流每次讀取8位二進(jìn)制數(shù),不能分解,重組和理解這些數(shù)據(jù),所以可以恢復(fù)到原來有意義的狀態(tài)。
  • 字符流每次讀取16位二進(jìn)制數(shù),將其作為一個字符處理。字符流的源或目標(biāo)通常是文本文件,Java語言使用的是Unicode編碼,字符流可以實(shí)現(xiàn)程序內(nèi)部格式與文本文件,顯示輸出等外部格式的轉(zhuǎn)換。
  • 在java.io中有四個類:

  • InputStream等四個類是抽象類,用于數(shù)據(jù)的輸入輸出。不能直接使用,因?yàn)椴荒鼙砻骶唧w對應(yīng)哪一種輸入輸出設(shè)備,更體現(xiàn)了輸入輸出操作獨(dú)立與相關(guān)設(shè)備。File是文件類,用于磁盤文件與文件夾的管理。RandomAccessFile是隨機(jī)訪問文件類,用于實(shí)現(xiàn)對磁盤文件的隨機(jī)讀寫操作。
  • 字節(jié)流類通常被用來讀寫圖片視頻等二進(jìn)制數(shù)據(jù),但也可以用來處理文本文件,字符流類通常用來處理文本文件。由于字節(jié)流不能直接操作Unicode編碼,因此不提倡使用字節(jié)流讀取文本文件,因?yàn)楫?dāng)文件中有漢字時可能會出現(xiàn)亂碼。

使用InputStream和OutputStream流類

下面流類的構(gòu)造方法和常用方法參見Java api

1.基本輸入輸出流

1.InpitStream流類

  • InputStream流類中包含了一套所有字節(jié)輸入都需要的方法,可以完成從輸入流讀入數(shù)據(jù)的操作。
  • 當(dāng)程序從鍵盤磁盤文件等外設(shè)讀入數(shù)據(jù)時,要先創(chuàng)建一個子類的對象來與外設(shè)連接,再調(diào)用該對象繼承的read()方法實(shí)現(xiàn)輸入操作。流中的方法都聲明拋出異常,所以程序中調(diào)用流方法時要處理異常,否則編譯不通過。

2.OutputStream流類

  • OutputStream類中包含了一套所有字節(jié)輸出都需要的方法,可以完成從輸出流寫入數(shù)據(jù)的操作。
  • 當(dāng)程序向屏幕磁盤文件等外設(shè)輸入數(shù)據(jù)時,要先創(chuàng)建一個子類對象來與外設(shè)連接,再調(diào)用該對象繼承的write()方法實(shí)現(xiàn)輸出操作。

2.輸入輸出流的應(yīng)用

InputStream類和OutputStream類時抽象類,具體實(shí)現(xiàn)輸入輸出操作時要派生出不同的子類,用于不同情況數(shù)據(jù)的輸入輸出操作。一起來學(xué)習(xí)這些類趴:

2.1文件輸入輸出流

  • FileInputStream和FileOutputStream流負(fù)責(zé)本地磁盤的文件的順序輸入輸出操作。
  • FileInputStream類的對象表示文件字節(jié)輸入流,從中可以讀取數(shù)據(jù)。 在生成該類的對象時若找不到指定文件,則一定會拋出FileNotFoundException異常。該異常必須捕獲或者聲明拋出。
  • FileOutputStream類的對象表示文件字節(jié)輸出流,可向流中寫入數(shù)據(jù)。在生成該類的對象時若找不到文件則創(chuàng)建一個新文件,若已存在,則清除原文件的內(nèi)容。在進(jìn)行文件讀寫操作時會產(chǎn)生IOException異常,該異常必須捕獲或聲明拋出。
  • 其中File是java.io包中的類,每個File對象表示一個磁盤文件或者文件夾,其中屬性包含了文件夾的名稱長度等信息。
  • 無論哪一個構(gòu)造方法,在創(chuàng)建文件輸入輸出流時都可能因?yàn)槲募粚?,路徑不對,屬性不對等無法打開文件造成錯誤,拋出FileNotFoundException異常,執(zhí)行writer()和reader()方法時因?yàn)镮O錯誤拋出IOException異常。所以輸入輸出流并調(diào)用構(gòu)造方法以及執(zhí)行讀寫操作的語句應(yīng)放在try語句塊中,并由相應(yīng)的catch語句捕獲異常。
  • FileDescriptor是該包中的另一個類,不能實(shí)例化。其中有三個靜態(tài)成員變量in,out,err。分別是標(biāo)準(zhǔn)輸入輸出流,標(biāo)準(zhǔn)錯誤流,可以利用它們實(shí)現(xiàn)鍵盤輸入屏幕輸出。

2.2順序輸入流

順序輸入流SequenceInputStream是將多個輸入流順序連接在一起,形成單一的數(shù)據(jù)輸入流,沒有對應(yīng)的數(shù)據(jù)輸出流。在輸入數(shù)據(jù)時,順序輸入流依次打開每個輸入流并讀取數(shù)據(jù)。直到最后一個輸入流讀取到EOF時為止。

2.3管道輸入輸出流

  • 管道輸入輸出流為了實(shí)現(xiàn)程序內(nèi)部線程間的通信或者不同程序的通信,這兩個類要結(jié)合使用,輸入流作為接受端,輸出流做為發(fā)送端。
  • 管道字節(jié)輸入流PipedInputStream類和管道字節(jié)輸出流PipedOutputStream類提供了管道的方式數(shù)據(jù)輸入輸出管理類。

2.4過濾輸入輸出流

  • 過濾字節(jié)輸入輸出流時建立在基本輸入輸出流之上的,在輸入輸出數(shù)據(jù)時可以對數(shù)據(jù)做類型和格式的轉(zhuǎn)換,即可以對二進(jìn)制字節(jié)數(shù)據(jù)理解和編碼轉(zhuǎn)換。
  • 過濾字節(jié)輸入流FilterInputStream和過濾字節(jié)輸出流FilterOutputStream可以在數(shù)據(jù)讀寫的同時實(shí)現(xiàn)數(shù)據(jù)操作。是上面兩個類的直接子類,也屬于抽象類,被DateInputStream和DateOutputStream繼承。
  • 有時候我們并不希望數(shù)據(jù)的傳輸以字節(jié)為基本單位,如一個二進(jìn)制文件存放的是整型數(shù)據(jù),我們希望按照int為基本單位進(jìn)行數(shù)據(jù)傳輸。這兩個過濾流可以將基本數(shù)據(jù)輸入輸出流轉(zhuǎn)換為基本數(shù)據(jù)類型的過濾流。

2.5標(biāo)準(zhǔn)輸入輸出

  • 前面說到的,在一般操作時,要先創(chuàng)建一個輸入輸出的實(shí)例化對象,完成與外設(shè)的連接,但是在與標(biāo)準(zhǔn)的輸入輸出設(shè)備連接時不用這樣。
  • Java系統(tǒng)實(shí)現(xiàn)在java.lang.System包中定義了靜態(tài)流對象,輸入流System.in,一般指鍵盤。輸出流System.out,一般指屏幕。標(biāo)準(zhǔn)錯誤輸出設(shè)備System.err使程序運(yùn)行錯誤時有日志等固定輸出位置。
  • (1)標(biāo)準(zhǔn)輸入,System.in是BufferedInputStream的對象,當(dāng)程序從鍵盤讀入數(shù)據(jù)時,調(diào)用System.in的read方法,從緩沖區(qū)讀入一個二進(jìn)制數(shù)據(jù)。使用時包含在try語句中,并捕獲或者拋出異常。
  • (2)標(biāo)準(zhǔn)輸出:System.out是打印輸出流PrintStream的對象。PrintStream類是過濾字節(jié)輸出流FilterOutputStream的一個子類,定義了print和println等不同的方法向屏幕輸出。
  • (3)標(biāo)準(zhǔn)錯誤流:System.err用于顯示用戶錯誤信息,是由PrintStream派生的類,作用是利用print把錯誤打印到屏幕上。使用與out同樣的方法:

例如System.err.print("錯誤")

代碼示例:

import java.io.*;
public class A_2 {
    public static void main(String[] args){
        try{
            byte[] b=new byte[128];
            System.out.print("請輸入字符:");
            int count=System.in.read(b);
            System.out.print("輸入的是:");
            for(int i=0;i<count;i++){
                System.out.print(b[i]+" ");
                System.out.println();
            }
            class InClass=System.in.getClass();
            class OutClass=System.out.getClass();
        }
    }
}

到此這篇關(guān)于Java超詳細(xì)梳理IO流的使用方法上的文章就介紹到這了,更多相關(guān)Java IO流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java多線程+鎖機(jī)制實(shí)現(xiàn)簡單模擬搶票的項(xiàng)目實(shí)踐

    Java多線程+鎖機(jī)制實(shí)現(xiàn)簡單模擬搶票的項(xiàng)目實(shí)踐

    鎖是一種同步機(jī)制,用于控制對共享資源的訪問,在線程獲取到鎖對象后,可以執(zhí)行搶票操作,本文主要介紹了Java多線程+鎖機(jī)制實(shí)現(xiàn)簡單模擬搶票的項(xiàng)目實(shí)踐,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • idea設(shè)置@Author文件頭注釋的實(shí)現(xiàn)步驟

    idea設(shè)置@Author文件頭注釋的實(shí)現(xiàn)步驟

    本文主要介紹了idea設(shè)置@Author文件頭注釋的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • SpringBoot 整合 Netty 多端口監(jiān)聽的操作方法

    SpringBoot 整合 Netty 多端口監(jiān)聽的操作方法

    Netty提供異步的、基于事件驅(qū)動的網(wǎng)絡(luò)應(yīng)用程序框架,用以快速開發(fā)高性能、高可靠性的網(wǎng)絡(luò) IO 程序,是目前最流行的 NIO 框架,這篇文章主要介紹了SpringBoot 整和 Netty 并監(jiān)聽多端口,需要的朋友可以參考下
    2023-10-10
  • Java?web訪問http://localhost:8080/xx/xx.jsp報(bào)404錯誤問題的解決方法

    Java?web訪問http://localhost:8080/xx/xx.jsp報(bào)404錯誤問題的解決方法

    這篇文章主要給大家介紹了關(guān)于Java?web訪問http://localhost:8080/xx/xx.jsp報(bào)404錯誤問題的解決方法,很多小伙伴在剛開始用Springboot整合jsp開發(fā)時都會遇到這個問題, 按照別人的教程一步一步搭建,但就是會報(bào)404,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 怎樣使用PowerMockito 測試靜態(tài)方法

    怎樣使用PowerMockito 測試靜態(tài)方法

    這篇文章主要介紹了使用PowerMockito 測試靜態(tài)的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Kotlin 基礎(chǔ)教程之異常

    Kotlin 基礎(chǔ)教程之異常

    這篇文章主要介紹了Kotlin 基礎(chǔ)教程之異常的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • CodeGPT + IDEA + DeepSeek如何在IDEA中引入DeepSeek實(shí)現(xiàn)AI智能開發(fā)

    CodeGPT + IDEA + DeepSeek如何在IDEA中引入DeepS

    文章介紹了如何在IDEA中使用CodeGPT和DeepSeek插件實(shí)現(xiàn)AI智能開發(fā),具體內(nèi)容包括安裝步驟、配置APIkey和參數(shù)設(shè)置等,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-02-02
  • 淺談java switch如果case后面沒有break,會出現(xiàn)什么情況?

    淺談java switch如果case后面沒有break,會出現(xiàn)什么情況?

    這篇文章主要介紹了淺談java switch如果case后面沒有break,會出現(xiàn)什么情況?具有很好的參考價值,希望對大家有所幫助。一起跟隨想小編過來看看吧
    2020-09-09
  • Java集合和數(shù)組的區(qū)別

    Java集合和數(shù)組的區(qū)別

    本文主要介紹了Java集合和數(shù)組的區(qū)別。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 簡單講解java中throws與throw的區(qū)別

    簡單講解java中throws與throw的區(qū)別

    這篇文章主要介紹了簡單講解java中throws與throw的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論

无极县| 左权县| 临泉县| 东海县| 正定县| 新野县| 云龙县| 定安县| 广西| 襄汾县| 罗城| 满城县| 永和县| 天峨县| 改则县| 辉南县| 高雄县| 谢通门县| 上饶市| 察雅县| 宝兴县| 南宁市| 蓬安县| 英吉沙县| 汝城县| 乐安县| 华池县| 溆浦县| 海口市| 巨野县| 东丰县| 通许县| 苍山县| 比如县| 库伦旗| 滦平县| 驻马店市| 武义县| 林州市| 开封县| 崇州市|