大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 io輸入輸出流的詳細介紹

io輸入輸出流的詳細介紹

更新時間:2022-09-27 09:49:38 來源:動力節(jié)點 瀏覽1990次

在Java的學(xué)習(xí)中,大家會學(xué)到IO流,對常用IO流也有一些了解,那么,io輸入輸出流是什么?動力節(jié)點小編來為大家進行詳細介紹。

JAVA IO

java io可以讓我們用標(biāo)準的讀寫操作來完成對不同設(shè)備的讀寫數(shù)據(jù)工作.

java將IO按照方向劃分為輸入與輸出,參照點是我們寫的程序.

輸入:用來讀取數(shù)據(jù)的,是從外界到程序的方向,用于獲取數(shù)據(jù).

輸出:用來寫出數(shù)據(jù)的,是從程序到外界的方向,用于發(fā)送數(shù)據(jù).

java將IO比喻為"流",即:stream. 就像生活中的"電流","水流"一樣,它是以同一個方向順序移動的過程.只不過這里流動的是字節(jié)(2進制數(shù)據(jù)).所以在IO中有輸入流和輸出流之分,我們理解他們是連接程序與另一端的"管道",用于獲取或發(fā)送數(shù)據(jù)到另一端.

Java定義了兩個超 類(抽象類):

java.io.InputStream:所有字節(jié)輸入流的超類,其中定義了讀取數(shù)據(jù)的方法.因此將來不管讀取的是什么設(shè)備(連接該設(shè)備的流)都有這些讀取的方法,因此我們可以用相同的方法讀取不同設(shè)備中的數(shù)據(jù)

java.io.OutputStream:所有字節(jié)輸出流的超類,其中定義了寫出數(shù)據(jù)的方法.

java將流分為兩類:節(jié)點流與處理流:

節(jié)點流:也稱為低級流.節(jié)點流的另一端是明確的,是實際讀寫數(shù)據(jù)的流,讀寫一定是建立在節(jié)點流基礎(chǔ)上進行的.

處理流:也稱為高級流.處理流不能獨立存在,必須連接在其他流上,目的是當(dāng)數(shù)據(jù)流經(jīng)當(dāng)前流時對數(shù)據(jù)進行加工處理來簡化我們對數(shù)據(jù)的該操作.

實際應(yīng)用中,我們可以通過串聯(lián)一組高級流到某個低級流上以流水線式的加工處理對某設(shè)備的數(shù)據(jù)進行讀寫,這個過程也成為流的連接,這也是IO的精髓所在.

文件流

文件流是一對低級流,用于讀寫文件數(shù)據(jù)的流.用于連接程序與文件(硬盤)的"管道".負責(zé)讀寫文件數(shù)據(jù).

文件輸出流:java.io.FileOutputStream

文件流創(chuàng)建時,如果該文件不存在會自動將其創(chuàng)建(前提是該文件所在目錄必須存在!)

塊讀寫的文件復(fù)制操作

int read(byte[] data) 一次性從文件中讀取給定的字節(jié)數(shù)組總長度的字節(jié)量,并存入到該數(shù)組中。 返回值為實際讀取到的字節(jié)量。若返回值為-1則表示讀取到了文件末尾。

塊寫操作 void write(byte[] data) 一次性將給定的字節(jié)數(shù)組所有字節(jié)寫入到文件中

void write(byte[] data,int offset,int len) 一次性將給定的字節(jié)數(shù)組從下標(biāo)offset處開始的連續(xù)len個字節(jié)寫入文件

寫文本數(shù)據(jù)

String提供方法: byte[] getBytes(String charsetName) 將當(dāng)前字符串轉(zhuǎn)換為一組字節(jié)

參數(shù)為字符集的名字,常用的是UTF-8。 其中中文字3字節(jié)表示1個,英文1字節(jié)表示1個。

文件輸出流-追加模式

重載的構(gòu)造方法可以將文件輸出流創(chuàng)建為追加模式

FileOutputStream(String path,boolean append)

FileOutputStream(File file,boolean append)

當(dāng)?shù)诙€參數(shù)傳入true時,文件流為追加模式,即:指定的文件若存在,則原有數(shù)據(jù)保留,新寫入的數(shù)據(jù)會被順序的追加到文件中

緩沖流

java.io.BufferedOutputStream和BufferedInputStream.

緩沖流是一對高級流,作用是提高讀寫數(shù)據(jù)的效率.

緩沖流內(nèi)部有一個字節(jié)數(shù)組,默認長度是8K.緩沖流讀寫數(shù)據(jù)時一定是將數(shù)據(jù)的讀寫方式轉(zhuǎn)換為塊讀寫來保證讀寫效率.

關(guān)閉流時只需要關(guān)閉高級流即可,它會自動關(guān)閉它連接的流

緩沖輸出流寫出數(shù)據(jù)時的緩沖區(qū)問題

通過緩沖流寫出的數(shù)據(jù)會被臨時存入緩沖流內(nèi)部的字節(jié)數(shù)組,直到數(shù)組存滿數(shù)據(jù)才會真實寫出一次

緩沖流的flush方法用于強制將緩沖區(qū)中已經(jīng)緩存的數(shù)據(jù)一次性寫出。

注:該方法實際上實在字節(jié)輸出流的超類OutputStream上定義的,并非只有緩沖

輸出流有這個方法。但是實際上只有緩沖輸出流的該方法有實際意義,其他的流實現(xiàn)

該方法的目的僅僅是為了在流連接過程中傳遞flush動作給緩沖輸出流。

對象流

java.io.ObjectOutputStream和ObjectInputSteam

對象流是一對高級流,在流連接中的作用是進行對象的序列化與反序列化。

對象序列化:將一個java對象按照其結(jié)構(gòu)轉(zhuǎn)換為一組字節(jié)的過程

對象反序列化:將一組字節(jié)還原為java對象(前提是這組字節(jié)是一個對象序列化得到的字節(jié))

Object readObject()
            該方法會進行對象的反序列化,如果對象流通過其連接的流讀取的字節(jié)分析并非
            是一個java對象時,會拋出異常:ClassNotFoundException

需要進行序列化的類必須實現(xiàn)接口:java.io.Serializable 實現(xiàn)序列化接口后最好主動定義序列化版本號這個常量。 這樣一來對象序列化時就不會根據(jù)類的結(jié)構(gòu)生成一個版本號,而是使用該固定值。 那么反序列化時,只要還原的對象和當(dāng)前類的版本號一致就可以進行還原。

transient關(guān)鍵字可以修飾屬性,用于在進行對象序列化時忽略不必要的屬性,達到對象瘦身的目的

字符流

java將流按照讀寫單位劃分為字節(jié)流與字符流.

java.io.InputStream和OutputStream是所有字節(jié)流的超類

而java.io.Reader和Writer則是所有字符流的超類,它們和字節(jié)流的超類是平級關(guān)系.

Reader和Writer是兩個抽象類,里面規(guī)定了所有字符流都必須具備的讀寫字符的相關(guān)方法.

字符流最小讀寫單位為字符(char),但是底層實際還是讀寫字節(jié),只是字符與字節(jié)的轉(zhuǎn)換工作由字符流完成.

轉(zhuǎn)換流

java.io.InputStreamReader和OutputStreamWriter

它們是字符流非常常用的一對實現(xiàn)類同時也是一對高級流,實際開發(fā)中我們不直接操作它們,但是它們在流連接中是非常重要的一環(huán).

轉(zhuǎn)換流的意義:

實際開發(fā)中我們還有功能更好用的字符高級流.但是其他的字符高級流都有一個共通點:不能直接連接在字節(jié)流上.而實際操作設(shè)備的流都是低級流同時也都是字節(jié)流.因此不能直接在流連接中串聯(lián)起來.轉(zhuǎn)換流是一對可以連接在字節(jié)流上的字符流,其他的高級字符流可以連接在轉(zhuǎn)換流上.在流連接中起到"轉(zhuǎn)換器"的作用(負責(zé)字符與字節(jié)的實際轉(zhuǎn)換)

緩沖字符流

緩沖字符輸出流:java.io.PrintWriter

java.io.BufferedWriter和BufferedReader

緩沖字符流內(nèi)部也有一個緩沖區(qū),讀寫文本數(shù)據(jù)以塊讀寫形式加快效率.并且緩沖流有一個特別的功能:可以按行讀寫文本數(shù)據(jù).

java.io.PrintWriter具有自動行刷新的緩沖字符輸出流,實際開發(fā)中更常用.它內(nèi)部總是會自動連接BufferedWriter作為塊寫加速使用.

PrintWriter的自動行刷新功能

如果實例化PW時第一個參數(shù)傳入的是一個流,則此時可以再傳入一個boolean型的參數(shù),此值為true時就打開了自動行刷新功能。 即: 每當(dāng)我們用PW的println方法寫出一行字符串后會自動flush.

緩沖字符輸入流:java.io.BufferedReader

是一個高級的字符流,特點是塊讀文本數(shù)據(jù),并且可以按行讀取字符串。

BufferedReader提供了一個讀取一行字符串的方法:

String readLine()

該方法會返回一行字符串,返回的字符串不含有最后的換行符。

當(dāng)某一行是空行時(該行內(nèi)容只有一個換行符)則返回值為空字符串。

如果流讀取到了末尾,則返回值為null。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 色综合天天综合高清网国产 | 老头与老头同性tube可播放 | 国产在线观看a | 色偷偷要色偷偷网站视频在线 | 日本亚洲免费 | 天天躁狠狠躁 | 日日摸夜夜添夜夜添人人爽 | 操操片| 奇米影视7777久久精品人人爽 | 4虎在线观看 | 奇米影视狠狠狠天天777 | 精品国产品香蕉在线观看 | 一区二区在线 | 久草热久 | 免费日b视频 | 久久黄色一级视频 | 国产在线精品一区二区三区 | 久久69| 日韩三区| 色妇色综合久久夜夜 | 欧美中文字幕在线视频 | 免费一级毛片在线播放不收费 | 精品一区二区在线欧美日韩 | 国产精品高清在线观看 | 欧美激情一区二区三区中文字幕 | 天天射日| 国产欧美一区二区久久 | 亚洲综合图区 | 免费日韩在线视频 | 国产成人精品2021欧美日韩 | 嘿咻成人免费视频欧美激情 | 亚洲欧美日韩精品久久亚洲区 | 97色精品视频在线观看免费 | 99热国产这里只有精品99 | 最近更新在线中文字幕一页 | 久久97精品久久久久久久看片 | 久久精品视频热 | 亚洲国产男人本色在线观看的a站 | 亚洲另类图片专区 | 国产在线观看成人免费视频 | videosex久久麻豆|