導航:首頁 > 編程語言 > java的輸入輸出流包括哪些類型

java的輸入輸出流包括哪些類型

發布時間:2024-06-18 23:07:50

java 流的分類有哪些

按流向分:
輸入流來: 程序可以從中讀取源數據的流。
輸出流: 程序能向其中寫入數據的流。
按數據傳輸單位分:
位元組流: 以位元組為單位傳輸數據的流
字元流: 以字元為單位傳輸數據的流
按功能分:
節點流: 用於直接操作目標設備的流

② java輸入輸出流怎麼寫,

這個簡單,主要就是幾個類,本人專業就是JAVA編程,把手教你郵件聯系

③ java中的io流有哪些

Java中的IO流
指的是將不同的輸入輸出源通過流的形式進行輸入或輸出的操作,流是一種抽象的描述,在程序中指的是數據的一種轉移方式。
IO流的分類:
(1)按照數據的流向:
輸入流、輸出流
(2)按照流數據的格式:
字元流、位元組流
(3)按照流數據的包裝過程:
節點流(低級流)、處理流(高級流)
最基本的幾種進行簡單介紹:
•InputStream/Reader: 所有的輸入流的基類,前者是位元組輸入流,後者是字元輸入流。
•OutputStream/Writer: 所有輸出流的基類,前者是位元組輸出流,後者是字元輸出流。

④ java 輸入輸出流 (被採納為答案者加100分)

stream代表的是任何有能力產出數據的數據源,或是任何有能力接收數據的接收源。在Java的IO中,所有的stream(包括Inputstream和Out stream)都包括兩種類型:

(1)位元組流

表示以位元組為單位從stream中讀取或往stream中寫入信息,即io包中的inputstream類和outputstream類的派生類。通常用來讀取二進制數據,如圖象和聲音。

(2)字元流

以Unicode字元為導向的stream,表示以Unicode字元為單位從stream中讀取或往stream中寫入信息。

區別:

Reader和Writer要解決的,最主要的問題就是國際化。原先的I/O類庫只支持8位的位元組流,因此不可能很好地處理16位的Unicode字元流。Unicode是國際化的字元集(更何況Java內置的char就是16位的Unicode字元),這樣加了Reader和Writer之後,所有的I/O就都支持Unicode了。此外新類庫的性能也比舊的好。

但是,Read和Write並不是取代InputStream和OutputStream,有時,你還必須同時使用"基於byte的類"和"基於字元的類"。為此,它還提供了兩個"適配器(adapter)"類。InputStreamReader負責將InputStream轉化成Reader,而OutputStreamWriter則將OutputStream轉化成Writer。

一.流的層次結構

定義:

(1) java將讀取數據對象成為輸入流,能向其寫入的對象叫輸出流。

二.InputStream類

inputstream類和outputstream類都為抽象類,不能創建對象,可以通過子類來實例化。

InputStream是輸入位元組數據用的類,所以InputStream類提供了3種重載的read方法.Inputstream類中的常用方法:

(1) public abstract int read( ):讀取一個byte的數據,返回值是高位補0的int類型值。

(2) public int read(byte b[ ]):讀取b.length個位元組的數據放到b數組中。返回值是讀取的位元組數。該方法實際上是調用下一個方法實現的

(3) public int read(byte b[ ], int off, int len):從輸入流中最多讀取len個位元組的數據,存放到偏移量為off的b數組中。

(4) public int available( ):返回輸入流中可以讀取的位元組數。注意:若輸入阻塞,當前線程將被掛起,如果InputStream對象調用這個方法的話,它只會返回0,這個方法必須由繼承InputStream類的子類對象調用才有用,

(5) public long skip(long n):忽略輸入流中的n個位元組,返回值是實際忽略的位元組數, 跳過一些位元組來讀取

(6) public int close( ) :我們在使用完後,必須對我們打開的流進行關閉.

三.OutputStream類

OutputStream提供了3個write方法來做數據的輸出,這個是和InputStream是相對應的。

1. public void write(byte b[ ]):將參數b中的位元組寫到輸出流。

2. public void write(byte b[ ], int off, int len) :將參數b的從偏移量off開始的len個位元組寫到輸出流。

3. public abstract void write(int b) :先將int轉換為byte類型,把低位元組寫入到輸出流中。

4. public void flush( ) : 將數據緩沖區中數據全部輸出,並清空緩沖區。

5. public void close( ) : 關閉輸出流並釋放與流相關的系統資源。

注意:

1. 上述各方法都有可能引起異常。

2. InputStream和OutputStream都是抽象類,不能創建這種類型的對象。

四.FileInputStream類

FileInputStream類是InputStream類的子類,用來處理以文件作為數據輸入源的數據流。使用方法:

方式1:

File fin=new File("d:/abc.txt");

FileInputStream in=new FileInputStream(fin);

方式2:

FileInputStream in=new

FileInputStream("d: /abc.txt");

方式3:

構造函數將 FileDescriptor()對象作為其參數。

FileDescriptor() fd=new FileDescriptor();

FileInputStream f2=new FileInputStream(fd);

五.FileOutputStream類

FileOutputStream類用來處理以文件作為數據輸出目的數據流;一個表示文件名的字元串,也可以是File或FileDescriptor對象。

創建一個文件流對象有兩種方法:

方式1:

File f=new File("d:/abc.txt");

FileOutputStream out=new FileOutputStream (f);

方式2:

FileOutputStream out=new

FileOutputStream("d:/abc.txt");

方式3:構造函數將 FileDescriptor()對象作為其參數。

FileDescriptor() fd=new FileDescriptor();

FileOutputStream f2=new FileOutputStream(fd);

方式4:構造函數將文件名作為其第一參數,將布爾值作為第二參數。

FileOutputStream f=new FileOutputStream("d:/abc.txt",true);

注意:

(1)文件中寫數據時,若文件已經存在,則覆蓋存在的文件;(2)的讀/寫操作結束時,應調用close方法關閉流。

舉例:2-1

六.File類

File類與InputStream / OutputStream類同屬於一個包,它不允許訪問文件內容。

File類主要用於命名文件、查詢文件屬性和處理文件目錄。

舉例:2-2

七.從一個流構造另一個流

java的流類提供了結構化方法,如,底層流和高層過濾流。

而高層流不是從輸入設備讀取,而是從其他流讀取。同樣高層輸出流也不是寫入輸出設備,而是寫入其他流。

使用"分層對象(layered objects)",為單個對象動態地,透明地添加功能的做法,被稱為Decorator Pattern。Decorator模式要求所有包覆在原始對象之外的對象,都必須具有與之完全相同的介面。這使得decorator的用法變得非常的透明--無論對象是否被decorate過,傳給它的消息總是相同的。這也是Java I/O類庫要有"filter(過濾器)"類的原因:抽象的"filter"類是所有decorator的基類。Decorator模式常用於如下的情形:如果用繼承來解決各種需求的話,類的數量會多到不切實際的地步。Java的I/O類庫需要提供很多功能的組合,於是decorator模式就有了用武之地。

為InputStream和OutputStream定義decorator類介面的類,分別是FilterInputStream和FilterOutputStream。

7.1 FilterInputStream
.......
具體去這里看看把,有很詳細的介紹。希望對你有幫助。

⑤ Java涓鏈夊嚑縐嶇被鍨嬬殑嫻

鍦↗ava.io鍖呬腑榪樻湁璁稿氬叾浠栫殑嫻侊紝涓昏佹槸涓轟簡鎻愰珮鎬ц兘鍜屼嬌鐢ㄦ柟渚褲侰/C++鍙鑳芥彁渚涘瓧鑺傛祦銆侸ava涓鐨勬祦鍒嗕負涓ょ嶏紝涓縐嶆槸瀛楄妭嫻侊紝鍙︿竴縐嶆槸瀛楃︽祦錛屽垎鍒鐢卞洓涓鎶借薄綾繪潵琛ㄧず錛堟瘡縐嶆祦鍖呮嫭杈撳叆鍜岃緭鍑轟袱縐嶆墍浠ヤ竴鍏卞洓涓錛:InputStream錛孫utputStream錛孯eader錛學riter銆侸ava涓鍏朵粬澶氱嶅氭牱鍙樺寲鐨勬祦鍧囨槸鐢卞畠浠媧劇敓鍑烘潵鐨.

瀛楃︽祦鍜屽瓧鑺傛祦鏄鏍規嵁澶勭悊鏁版嵁鐨勪笉鍚屾潵鍖哄垎鐨勩傚瓧鑺傛祦鎸夌収8浣嶄紶杈擄紝瀛楄妭嫻佹槸鏈鍩烘湰鐨勶紝鎵鏈夋枃浠剁殑鍌ㄥ瓨鏄閮芥槸瀛楄妭錛坆yte錛夌殑鍌ㄥ瓨錛屽湪紓佺洏涓婁繚鐣欑殑騫朵笉鏄鏂囦歡鐨勫瓧絎﹁屾槸鍏堟妸瀛楃︾紪鐮佹垚瀛楄妭錛屽啀鍌ㄥ瓨榪欎簺瀛楄妭鍒扮佺洏銆

1.瀛楄妭嫻佸彲鐢ㄤ簬浠諱綍綾誨瀷鐨勫硅薄錛屽寘鎷浜岃繘鍒跺硅薄錛岃屽瓧絎︽祦鍙鑳藉勭悊瀛楃︽垨鑰呭瓧絎︿覆錛

2. 瀛楄妭嫻佹彁渚涗簡澶勭悊浠諱綍綾誨瀷鐨処O鎿嶄綔鐨勫姛鑳斤紝浣嗗畠涓嶈兘鐩存帴澶勭悊Unicode瀛楃︼紝鑰屽瓧絎︽祦灝卞彲浠ャ

璇繪枃鏈鐨勬椂鍊欑敤瀛楃︽祦錛屼緥濡倀xt鏂囦歡銆傝婚潪鏂囨湰鏂囦歡鐨勬椂鍊欑敤瀛楄妭嫻侊紝渚嬪俶p3銆傜悊璁轟笂浠諱綍鏂囦歡閮借兘澶熺敤瀛楄妭嫻佽誨彇錛屼絾褰撹誨彇鐨勬槸鏂囨湰鏁版嵁鏃訛紝涓轟簡鑳借繕鍘熸垚鏂囨湰浣犲繀欏誨啀緇忚繃涓涓杞鎹㈢殑宸ュ簭錛岀浉瀵規潵璇村瓧絎︽祦灝辯渷浜嗚繖涓楹葷儲錛屽彲浠ユ湁鏂規硶鐩存帴璇誨彇銆

瀛楃︽祦澶勭悊鐨勫崟鍏冧負2涓瀛楄妭鐨刄nicode瀛楃︼紝鍒嗗埆鎿嶄綔瀛楃︺佸瓧絎︽暟緇勬垨瀛楃︿覆錛岃屽瓧鑺傛祦澶勭悊鍗曞厓涓1涓瀛楄妭錛 鎿嶄綔瀛楄妭鍜屽瓧鑺傛暟緇勩傛墍浠ュ瓧絎︽祦鏄鐢盝ava鉶氭嫙鏈哄皢瀛楄妭杞鍖栦負2涓瀛楄妭鐨刄nicode瀛楃︿負鍗曚綅鐨勫瓧絎﹁屾垚鐨勶紝鎵浠ュ畠瀵瑰氬浗璇璦鏀鎸佹ф瘮杈冨ソ錛

1錛庡瓧鑺傛祦錛氱戶鎵誇簬InputStream \ OutputStream銆

OutputStream鎻愪緵鐨勬柟娉曪細

void write(int b):鍐欏叆涓涓瀛楄妭鐨勬暟鎹

void write(byte[] buffer):灝嗘暟緇刡uffer鐨勬暟鎹鍐欏叆嫻

void write(byte[] buffer,int offset,int len):浠巄uffer[offset]寮濮嬶紝鍐欏叆len涓瀛楄妭鐨勬暟鎹

void flush():寮哄埗灝哹uffer鍐呯殑鏁版嵁鍐欏叆嫻

void close():鍏抽棴嫻

InputStream鎻愪緵鐨勬柟娉曪細

int read():璇誨嚭涓涓瀛楄妭鐨勬暟鎹錛屽傛灉宸茶揪鏂囦歡鐨勬湯絝錛岃繑鍥炲間負錛1

int read(byte[] buffer):璇誨嚭buffer澶у皬鐨勬暟鎹錛岃繑鍥炲間負瀹為檯鎵璇誨嚭鐨勫瓧鑺傛暟

int read(byte[] buffer,int offset,int len)

int available():榪斿洖嫻佸唴鍙渚涜誨彇鐨勫瓧鑺傛暟鐩

long skip(long n):璺寵繃n涓瀛楄妭鐨勬暟鎹錛岃繑鍥炲間負瀹為檯鎵璺寵繃鐨勬暟鎹鏁

void close():鍏抽棴嫻

2錛庡瓧絎︽祦錛岀戶鎵誇簬InputStreamReader \ OutputStreamWriter銆

瀛楃︽祦鐨勭被錛1錛夛紝BufferedReader鏄涓縐嶈繃婊ゅ櫒錛坒ilter錛夛紙extends FilterReader錛夈傝繃婊

鍣ㄧ敤鏉ュ皢嫻佺殑鏁版嵁鍔犱互澶勭悊鍐嶈緭鍑恆傛瀯閫犲嚱鏁頒負錛

BufferedReader(Reader in):鐢熸垚涓涓緙撳啿鐨勫瓧絎﹁緭鍏ユ祦錛宨n涓轟竴涓璇誨彇鍣

BufferedReader(Reader in,int size):鐢熸垚涓涓緙撳啿鐨勫瓧絎﹁緭鍏ユ祦錛屽苟鎸囧畾緙撳啿鍖虹殑澶у皬涓簊ize

public class IOStreamDemo {
public void samples錛堬級 throws IOException { //1. 榪欐槸浠庨敭鐩樿誨叆涓琛屾暟鎹,榪斿洖鐨勬槸涓涓瀛楃︿覆
BufferedReader stdin =new BufferedReader錛坣ew InputStreamReader錛圫ystem.in錛夛級錛
System.out.print錛"Enter a line:"錛夛紱
System.out.println錛坰tdin.readLine錛堬級錛夛紱

//2. 榪欐槸浠庢枃浠朵腑閫愯岃誨叆鏁版嵁

BufferedReader in = new BufferedReader錛坣ew FileReader錛"IOStreamDemo.java"錛夛級錛
String s, s2 = new String錛堬級錛
while錛堬紙s = in.readLine錛堬級錛!= null錛
s2 += s + "\n"錛
in.close錛堬級錛

//3. 榪欐槸浠庝竴涓瀛楃︿覆涓閫愪釜璇誨叆瀛楄妭
StringReader in1 = new StringReader錛坰2錛夛紱
int c錛
while錛堬紙c = in1.read錛堬級錛 != -1錛
System.out.print錛堬紙char錛塩錛夛紱

//4. 榪欐槸灝嗕竴涓瀛楃︿覆鍐欏叆鏂囦歡
try {
BufferedReader in2 = new BufferedReader錛坣ew StringReader錛坰2錛夛級錛
PrintWriter out1 = new PrintWriter錛坣ew BufferedWriter錛坣ew FileWriter錛"IODemo.out"錛夛級錛夛紱
int lineCount = 1錛
while錛堬紙s = in2.readLine錛堬級錛 != null 錛
out1.println錛坙ineCount++ + ": " + s錛夛紱
out1.close錛堬級錛
} catch錛圗OFException e錛 {
System.err.println錛"End of stream"錛夛紱
}
} }

瀵逛簬涓婇潰鐨勪緥瀛愶紝闇瑕佽存槑鐨勬湁浠ヤ笅鍑犵偣錛

1. InputStreamReader鏄疘nputStream鍜孯eader涔嬮棿鐨勬ˉ姊侊紝鐢變簬System.in鏄瀛楄妭嫻侊紝闇瑕佺敤瀹冩潵鍖呰呬箣鍚庡彉涓哄瓧絎︽祦渚涚粰BufferedReader浣跨敤銆

3. PrintWriter out1 = new PrintWriter錛坣ew BufferedWriter錛坣ew FileWriter錛"IODemo.out"錛夛級錛夛紱

榪欏彞璇濅綋鐜頒簡Java杈撳叆杈撳嚭緋葷粺鐨勪竴涓鐗圭偣錛屼負浜嗚揪鍒版煇涓鐩鐨勶紝闇瑕佸寘瑁呭ソ鍑犲眰銆傞栧厛錛岃緭鍑虹洰鐨勫湴鏄鏂囦歡IODemo.out錛屾墍浠ユ渶鍐呭眰鍖呰呯殑鏄疐ileWriter錛屽緩絝嬩竴涓杈撳嚭鏂囦歡嫻侊紝鎺ヤ笅鏉ワ紝鎴戜滑甯屾湜榪欎釜嫻佹槸緙撳啿鐨勶紝鎵浠ョ敤BufferedWriter鏉ュ寘瑁呭畠浠ヨ揪鍒扮洰鐨勶紝鏈鍚庯紝鎴戜滑闇瑕佹牸寮忓寲杈撳嚭緇撴灉錛屼簬鏄灝哖rintWriter鍖呭湪鏈澶栧眰銆

Java嫻佹湁鐫鍙︿竴涓閲嶈佺殑鐢ㄩ旓紝閭e氨鏄鍒╃敤瀵硅薄嫻佸瑰硅薄榪涜屽簭鍒楀寲銆

鍦ㄤ竴涓紼嬪簭榪愯岀殑鏃跺欙紝鍏朵腑鐨勫彉閲忔暟鎹鏄淇濆瓨鍦ㄥ唴瀛樹腑鐨勶紝涓鏃︾▼搴忕粨鏉熻繖浜涙暟鎹灝嗕笉浼氳淇濆瓨錛屼竴縐嶈В鍐崇殑鍔炴硶鏄灝嗘暟鎹鍐欏叆鏂囦歡錛岃孞ava涓鎻愪緵浜嗕竴縐嶆満鍒訛紝瀹冨彲浠ュ皢紼嬪簭涓鐨勫硅薄鍐欏叆鏂囦歡錛屼箣鍚庡啀浠庢枃浠朵腑鎶婂硅薄璇誨嚭鏉ラ噸鏂板緩絝嬨傝繖灝辨槸鎵璋撶殑瀵硅薄搴忓垪鍖栥侸ava涓寮曞叆瀹冧富瑕佹槸涓轟簡RMI錛圧emote
Method Invocation錛夊拰Java Bean鎵鐢錛屼笉榪囧湪騫蟲椂搴旂敤涓錛屽畠涔熸槸寰堟湁鐢ㄧ殑涓縐嶆妧鏈銆

⑥ JAVA闂棰

澶у氬垵瀛﹁呭筳ava I/O緋葷粺鎻愪緵浜嗗傛ゅ氱殑綾昏屾劅鍒頒笉鐭ユ墍閿欙紝鏈鏂囦腑灝嗕細鍋氫竴涓嬫⒊鐞
嫻佺殑姒傚康
嫻侊紙stream錛夌殑姒傚康婧愪簬UNIX涓鐨勭¢亾錛坧ipe錛夌殑姒傚康銆傚湪UNIX涓錛岀¢亾鏄涓鏉′笉闂存柇鐨勫瓧鑺傛祦錛岀敤鏉ュ疄鐜扮▼搴忔垨榪涚▼闂寸殑閫氫俊錛屾垨璇誨啓澶栧洿璁懼囥佸栭儴鏂囦歡絳夈
涓涓嫻侊紝蹇呮湁婧愮鍜岀洰鐨勭錛屽畠浠鍙浠ユ槸璁$畻鏈哄唴瀛樼殑鏌愪簺鍖哄煙錛屼篃鍙浠ユ槸紓佺洏鏂囦歡錛岀敋鑷沖彲浠ユ槸Internet涓婄殑鏌愪釜URL銆
嫻佺殑鏂瑰悜鏄閲嶈佺殑錛屾牴鎹嫻佺殑鏂瑰悜錛屾祦鍙浠ュ垎涓轟袱綾伙細杈撳叆嫻佸拰杈撳嚭嫻併傜敤鎴峰彲浠ヤ粠杈撳叆嫻佷腑璇誨彇淇℃伅錛屼絾涓嶈兘鍐欏畠銆傜浉鍙嶏紝瀵硅緭鍑烘祦錛屽彧鑳藉線寰杈撳叆嫻佸啓錛岃屼笉鑳借誨彇銆傚叾瀹炶緭鍏/杈撳嚭鏄鎯沖逛簬鍐呭瓨鏉ヨ寸殑銆
瀹為檯涓婏紝嫻佺殑婧愮鍜岀洰鐨勭鍙綆鍗曞湴鐪嬫垚鏄瀛楄妭鐨勭敓浜ц呭拰娑堣垂鑰咃紝瀵逛簬杈撳叆嫻侊紝鍙涓嶅繀鍏沖績瀹冪殑婧愮鏄浠涔堬紝鍙瑕佺畝鍗曞湴浠庢祦涓璇繪暟鎹錛岃屽硅緭鍑烘祦錛屼篃鍙涓嶇煡閬撳畠鐨勭洰鐨勭錛屽彧鏄綆鍗曞湴寰嫻佷腑鍐欐暟鎹銆
java.io鍖呬腑鐨勭被瀵瑰簲涓ょ被嫻侊紝涓綾繪祦鐩存帴浠庢寚瀹氱殑浣嶇疆錛堝傜佺洏鏂囦歡鎴栧唴瀛樺尯鍩燂級璇繪垨鍐欙紝榪欑被嫻佺О涓虹粨鐐規祦錛屽叾浠栫殑嫻佸垯縐頒負榪囨護嫻侊紙鍖呰呮祦錛
榪囨護嫻侊細涓浜涙祦鍙浠ヤ粠鏂囦歡浠ュ強鍏朵粬鍦版柟鎺ユ敹瀛楄妭錛屽彟涓浜涙祦鍙浠ュ皢瀛楄妭緇勫悎鎴愭洿鏈夌敤鐨勬暟鎹綾誨瀷銆傚皢涓涓宸茬粡瀛樺湪鐨勬祦浼犻掔粰鍙︿竴涓嫻佺殑鏋勯犳柟娉曪紝灝嗚繖涓ょ嶆祦緇撳悎璧鋒潵錛岀粨鍚堝悗鐨勬祦琚縐頒負榪囨護嫻併
榪囨護鍣ㄨ緭鍏ユ祦寰寰鏄浠ュ叾瀹冭緭鍏ユ祦浣滀負瀹冪殑杈撳叆婧愶紝緇忚繃榪囨護鎴栧勭悊鍚庡啀浠ユ柊鐨勮緭鍏ユ祦鐨勫艦寮忔彁渚涚粰鐢ㄦ埛錛岃繃婊ゅ櫒杈撳嚭嫻佷篃綾諱技銆

java鐨勫父鐢ㄨ緭鍏ャ佽緭鍑烘祦
鍏跺疄閮芥槸緇ф壙鑷4涓鎶借薄綾伙紝鍒嗗埆鏄
鍩轟簬鍗曞瓧鑺傜殑InputStream,OutputStream綾
鍩轟簬鍙屽瓧鑺傜殑Unicode浠g爜鍗曞厓鐨 Reader錛 Writer綾
涓鏃︽墦寮杈撳叆嫻佸悗錛岀▼搴忓氨鍙浠庤緭鍏ユ祦涓茶屽湴璇繪暟鎹銆
浠庤緭鍏ユ祦璇繪暟鎹鐨勮繃紼嬩竴鑸濡備笅錛
open a stream
while more information
read information
close the stream

綾諱技鍦幫紝紼嬪簭涔熻兘閫氳繃鎵撳紑涓涓杈撳嚭嫻佸苟欏哄簭鍦板啓鍏ユ暟鎹鏉ュ皢淇℃伅閫佽嚦鐩鐨勭銆
寰杈撳嚭嫻佸啓鏁版嵁鐨勮繃紼嬩竴鑸濡備笅錛
open a stream
while more information
write information
close the stream
java.io鍖呬腑鐨剆tream綾繪牴鎹瀹冧滑鎿嶄綔瀵硅薄鐨勭被鍨嬫槸瀛楃﹁繕鏄瀛楄妭鍙鍒嗕負涓ゅぇ綾伙細 瀛楃︽祦鍜屽瓧鑺傛祦銆
InputStream,OutputStream綾諱粎浠呰誨彇鍜屽啓鍏ュ崟涓鐨勫瓧鑺傚拰瀛楄妭鏁扮粍錛屽畠浠娌℃湁璇誨彇鍜屽啓鍏ュ瓧絎︿覆鍜屾暟鍊肩殑鏂規硶銆
鐢變簬浠ュ瓧鑺備負鍗曚綅鐨勬祦澶勭悊瀛樺偍涓篣nicode鐮佺殑淇℃伅寰堜笉鏂逛究錛圲nicode鐨勬瘡涓浠g爜鍗曞厓浣跨敤浜嗕袱涓瀛楄妭錛夛紝鎵浠ユ湁浜嗕竴涓涓撻棬鐨勭被灞傛℃潵澶勭悊Unicode瀛楃︼紝榪欎簺綾葷戶鎵誇簬鎶借薄綾籖eader鍜學riter銆

1.1 浠ュ瓧鑺備負瀵煎悜鐨剆tream

浠ュ瓧鑺備負瀵煎悜鐨剆tream錛岃〃紺轟互瀛楄妭涓哄崟浣嶄粠stream涓璇誨彇鎴栧線stream涓鍐欏叆淇℃伅銆備互瀛楄妭涓哄煎悜鐨剆tream鍖呮嫭涓嬮潰鍑犵嶇被鍨嬶細
1銆俰nput stream錛
1) ByteArrayInputStream錛氭妸鍐呭瓨涓鐨勪竴涓緙撳啿鍖轟綔涓篒nputStream浣跨敤
2) StringBufferInputStream錛氭妸涓涓猄tring瀵硅薄浣滀負InputStream ---宸茶繃鏃躲 姝ょ被鏈鑳芥g『鍦板皢瀛楃﹁漿鎹涓哄瓧鑺傘備粠 JDK 1.1 寮濮嬶紝浠庡瓧絎︿覆鍒涘緩嫻佺殑棣栭夋柟娉曟槸閫氳繃 StringReader 綾昏繘琛屽壋寤恆
3) FileInputStream錛氭妸涓涓鏂囦歡浣滀負InputStream錛屽疄鐜板規枃浠剁殑璇誨彇鎿嶄綔
4) PipedInputStream錛氬疄鐜頒簡pipe鐨勬傚康錛屼富瑕佸湪綰跨▼涓浣跨敤
5) SequenceInputStream錛氭妸澶氫釜InputStream鍚堝苟涓轟竴涓狪nputStream
2銆侽ut stream
1) ByteArrayOutputStream錛氭妸淇℃伅瀛樺叆鍐呭瓨涓鐨勪竴涓緙撳啿鍖轟腑
2) FileOutputStream錛氭妸淇℃伅瀛樺叆鏂囦歡涓
3) PipedOutputStream錛氬疄鐜頒簡pipe鐨勬傚康錛屼富瑕佸湪綰跨▼涓浣跨敤
4) SequenceOutputStream錛氭妸澶氫釜OutStream鍚堝苟涓轟竴涓狾utStream
1.2 浠Unicode瀛楃︿負瀵煎悜鐨剆tream
浠Unicode瀛楃︿負瀵煎悜鐨剆tream錛岃〃紺轟互Unicode瀛楃︿負鍗曚綅浠巗tream涓璇誨彇鎴栧線stream涓鍐欏叆淇℃伅銆備互Unicode瀛楃︿負瀵煎悜鐨剆tream鍖呮嫭涓嬮潰鍑犵嶇被鍨嬶細
1)銆侷nput Stream
1) CharArrayReader錛氫笌ByteArrayInputStream瀵瑰簲
2) StringReader錛氫笌StringBufferInputStream瀵瑰簲
3) FileReader錛氫笌FileInputStream瀵瑰簲
4) PipedReader錛氫笌PipedInputStream瀵瑰簲
2銆侽ut Stream
1) CharArrayWrite錛氫笌ByteArrayOutputStream瀵瑰簲
2) StringWrite錛氭棤涓庝箣瀵瑰簲鐨勪互瀛楄妭涓哄煎悜鐨剆tream
3) FileWrite錛氫笌FileOutputStream瀵瑰簲
4) PipedWrite錛氫笌PipedOutputStream瀵瑰簲
浠ュ瓧絎︿負瀵煎悜鐨剆tream鍩烘湰涓婂規湁涓庝箣鐩稿瑰簲鐨勪互瀛楄妭涓哄煎悜鐨剆tream銆備袱涓瀵瑰簲綾誨疄鐜扮殑鍔熻兘鐩稿悓錛屽瓧鏄鍦ㄦ搷浣滄椂鐨勫煎悜涓嶅悓銆傚侰harArrayReader錛氬拰ByteArrayInputStream鐨勪綔鐢ㄩ兘鏄鎶婂唴瀛樹腑鐨勪竴涓緙撳啿鍖轟綔涓篒nputStream浣跨敤錛屾墍涓嶅悓鐨勬槸鍓嶈呮瘡嬈′粠鍐呭瓨涓璇誨彇涓涓瀛楄妭鐨勪俊鎮錛岃屽悗鑰呮瘡嬈′粠鍐呭瓨涓璇誨彇涓涓瀛楃︺

1.3 涓ょ嶄笉闄愬煎悜鐨剆tream涔嬮棿鐨勮漿鎹
InputStreamReader鍜孫utputStreamReader錛氭妸涓涓浠ュ瓧鑺備負瀵煎悜鐨剆tream杞鎹㈡垚涓涓浠ュ瓧絎︿負瀵煎悜鐨剆tream銆
InputStreamReader 鏄瀛楄妭嫻侀氬悜瀛楃︽祦鐨勬ˉ姊侊細瀹冧嬌鐢ㄦ寚瀹氱殑 charset 璇誨彇瀛楄妭騫跺皢鍏惰В鐮佷負瀛楃︺傚畠浣跨敤鐨勫瓧絎﹂泦鍙浠ョ敱鍚嶇О鎸囧畾鎴栨樉寮忕粰瀹氾紝鎴栬呭彲浠ユ帴鍙楀鉤鍙伴粯璁ょ殑瀛楃﹂泦
OutputStreamWriter 鏄瀛楃︽祦閫氬悜瀛楄妭嫻佺殑妗ユ侊細鍙浣跨敤鎸囧畾鐨 charset 灝嗚佸啓鍏ユ祦涓鐨勫瓧絎︾紪鐮佹垚瀛楄妭銆傚畠浣跨敤鐨勫瓧絎﹂泦鍙浠ョ敱鍚嶇О鎸囧畾鎴栨樉寮忕粰瀹氾紝鍚﹀垯灝嗘帴鍙楀鉤鍙伴粯璁ょ殑瀛楃﹂泦銆

2. stream娣誨姞灞炴
2.1 鈥滀負stream娣誨姞灞炴р濈殑浣滅敤
榪愮敤涓婇潰浠嬬粛鐨凧ava涓鎿嶄綔IO鐨凙PI錛屾垜浠灝卞彲瀹屾垚鎴戜滑鎯沖畬鎴愮殑浠諱綍鎿嶄綔浜嗐備絾閫氳繃FilterInputStream鍜孎ilterOutStream鐨勫瓙綾伙紝鎴戜滑鍙浠ヤ負stream娣誨姞灞炴с備笅闈浠ヤ竴涓渚嬪瓙鏉ヨ存槑榪欑嶅姛鑳界殑浣滅敤銆
濡傛灉鎴戜滑瑕佸線涓涓鏂囦歡涓鍐欏叆鏁版嵁錛屾垜浠鍙浠ヨ繖鏍鋒搷浣滐細
FileOutStream fs = new FileOutStream(鈥渢est.txt鈥);
鐒跺悗灝卞彲浠ラ氳繃浜х敓鐨刦s瀵硅薄璋冪敤write()鍑芥暟鏉ュ線test.txt鏂囦歡涓鍐欏叆鏁版嵁浜嗐備絾鏄錛屽傛灉鎴戜滑鎯沖疄鐜扳滃厛鎶婅佸啓鍏ユ枃浠剁殑鏁版嵁鍏堢紦瀛樺埌鍐呭瓨涓錛屽啀鎶婄紦瀛樹腑鐨勬暟鎹鍐欏叆鏂囦歡涓鈥濈殑鍔熻兘鏃訛紝涓婇潰鐨凙PI灝辨病鏈変竴涓鑳芥弧瓚蟲垜浠鐨勯渶奼備簡銆備絾鏄閫氳繃FilterInputStream鍜孎ilterOutStream鐨勫瓙綾伙紝涓篎ileOutStream娣誨姞鎴戜滑鎵闇瑕佺殑鍔熻兘銆

2.2 FilterInputStream鐨勫悇縐嶇被鍨
2.2.1 鐢ㄤ簬灝佽呬互瀛楄妭涓哄煎悜鐨処nputStream
1) DataInputStream錛氫粠stream涓璇誨彇鍩烘湰綾誨瀷錛坕nt銆乧har絳夛級鏁版嵁銆
2) BufferedInputStream錛氫嬌鐢ㄧ紦鍐插尯
3) LineNumberInputStream錛氫細璁板綍input stream鍐呯殑琛屾暟錛岀劧鍚庡彲浠ヨ皟鐢╣etLineNumber()鍜宻etLineNumber(int)
4) PushbackInputStream錛氬緢灝戠敤鍒幫紝涓鑸鐢ㄤ簬緙栬瘧鍣ㄥ紑鍙
2.2.2 鐢ㄤ簬灝佽呬互瀛楃︿負瀵煎悜鐨処nputStream
1) 娌℃湁涓嶥ataInputStream瀵瑰簲鐨勭被銆傞櫎闈炲湪瑕佷嬌鐢╮eadLine()鏃舵敼鐢˙ufferedReader錛屽惁鍒欎嬌鐢―ataInputStream
2) BufferedReader錛氫笌BufferedInputStream瀵瑰簲
3) LineNumberReader錛氫笌LineNumberInputStream瀵瑰簲
4) PushBackReader錛氫笌PushbackInputStream瀵瑰簲
2.3 FilterOutStream鐨勫悇縐嶇被鍨
2.2.3 鐢ㄤ簬灝佽呬互瀛楄妭涓哄煎悜鐨凮utputStream
1) DataIOutStream錛氬線stream涓杈撳嚭鍩烘湰綾誨瀷錛坕nt銆乧har絳夛級鏁版嵁銆
2) BufferedOutStream錛氫嬌鐢ㄧ紦鍐插尯
3) PrintStream錛氫駭鐢熸牸寮忓寲杈撳嚭
2.2.4 鐢ㄤ簬灝佽呬互瀛楃︿負瀵煎悜鐨凮utputStream
1) BufferedWrite錛氫笌BufferedOutStream瀵瑰簲
2) PrintWrite錛氫笌 PrintStream瀵瑰簲
3. RandomAccessFile
1) 鍙閫氳繃RandomAccessFile瀵硅薄瀹屾垚瀵規枃浠剁殑璇誨啓鎿嶄綔
2) 鍦ㄤ駭鐢熶竴涓瀵硅薄鏃訛紝鍙鎸囨槑瑕佹墦寮鐨勬枃浠剁殑鎬ц川錛歳錛屽彧璇伙紱w錛屽彧鍐欙紱rw鍙璇誨啓
3) 鍙浠ョ洿鎺ヨ煩鍒版枃浠朵腑鎸囧畾鐨勪綅緗

4. I/O搴旂敤鐨勪竴涓渚嬪瓙
import java.io.*;
public class TestIO{
public static void main(String[] args)
throws IOException{
//1.浠ヨ屼負鍗曚綅浠庝竴涓鏂囦歡璇誨彇鏁版嵁
/*褰撹誨彇鏂囦歡鏃訛紝鍏堟妸鏂囦歡鍐呭硅誨埌緙撳瓨涓錛屽綋璋冪敤in.readLine()鏃訛紝
鍐嶄粠緙撳瓨涓浠ュ瓧絎︾殑鏂瑰紡璇誨彇鏁版嵁錛堜互涓嬬畝縐扳滅紦瀛樺瓧鑺傝誨彇鏂瑰紡鈥濓級銆
*/
BufferedReader in = new BufferedReader(new FileReader("F:\\java\\TestIO.java"));
String s, s2 = new String();
while((s = in.readLine()) != null)
s2 += s + "\n";
in.close();

//1b. 鎺ユ敹閿鐩樼殑杈撳叆
/*鐢變簬鎯充互緙撳瓨瀛楄妭璇誨彇鏂瑰紡浠庢爣鍑咺O錛堥敭鐩橈級涓璇誨彇鏁版嵁錛屾墍浠ヨ
鍏堟妸鏍囧噯IO錛圫ystem.in錛夎漿鎹㈡垚瀛楃﹀煎悜鐨剆tream錛屽啀榪涜孊ufferedReader灝佽呫
*/
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter a line:");
System.out.println(stdin.readLine());

//2. 浠庝竴涓猄tring瀵硅薄涓璇誨彇鏁版嵁
/*
瑕佷互瀛楃︾殑褰㈠紡浠庝竴涓猄tring瀵硅薄涓璇誨彇鏁版嵁錛屾墍浠ヨ佷駭鐢熶竴涓猄tringReader綾誨瀷鐨剆tream銆
*/
StringReader in2 = new StringReader(s2);
int c;
while((c = in2.read()) != -1)
System.out.println((char)c);
in2.close();

//3. 浠庡唴瀛樺彇鍑烘牸寮忓寲杈撳叆
//鎶婂唴瀛樹腑鐨勪竴涓緙撳啿鍖轟綔涓篋ataInputStream浣跨敤

try{
DataInputStream in3 = new DataInputStream(new ByteArrayInputStream(s2.getBytes()));
while(true)
System.out.println((char)in3.readByte());
}catch(EOFException e){
System.out.println("End of stream");
}

//4. 杈撳嚭鍒版枃浠
/*瀵筍tring瀵硅薄s2璇誨彇鏁版嵁鏃訛紝鍏堟妸瀵硅薄涓鐨勬暟鎹瀛樺叆緙撳瓨涓錛屽啀浠庣紦鍐蹭腑榪涜岃誨彇錛涘筎estIO.out鏂囦歡榪涜屾搷浣滄椂錛
鍏堟妸鏍煎紡鍖栧悗鐨勪俊鎮杈撳嚭 鍒扮紦瀛樹腑錛屽啀鎶婄紦瀛樹腑鐨勪俊鎮杈撳嚭鍒版枃浠朵腑銆
*/
try{
BufferedReader in4 = new BufferedReader(new StringReader(s2));
PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("F:\\java\\ TestIO.out")));
int lineCount = 1;
while((s = in4.readLine()) != null)
out1.println(lineCount++ + "錛" + s);
out1.close();
in4.close();
} catch(EOFException ex){
ystem.out.println("End of stream");
}

//5. 鏁版嵁鐨勫瓨鍌ㄥ拰鎮㈠
/*瀵笵ata.txt鏂囦歡榪涜岃緭鍑烘椂錛屾槸鍏堟妸鍩烘湰綾誨瀷鐨勬暟鎹杈撳嚭灞嬬紦瀛樹腑錛屽啀鎶婄紦瀛樹腑鐨勬暟鎹杈撳嚭鍒版枃浠朵腑錛涘規枃浠惰繘琛岃誨彇鎿嶄綔鏃訛紝鍏堟妸鏂囦歡涓鐨勬暟鎹璇誨彇鍒扮紦瀛樹腑錛屽啀浠庣紦瀛樹腑浠ュ熀鏈綾誨瀷鐨勫艦寮忚繘琛岃誨彇銆傛敞鎰廼n5.readDouble()榪欎竴琛屻傚洜涓哄啓鍏ョ涓涓獁riteDouble()錛屾墍浠ヤ負浜嗘g『鏄劇ず銆備篃瑕佷互鍩烘湰綾誨瀷鐨勫艦寮忚繘琛岃誨彇銆
*/
try{
DataOutputStream out2 = new DataOutputStream(new BufferedOutputStream( new FileOutputStream("F:\\java\\ Data.txt")));
out2.writeDouble(3.1415926);
out2.writeChars("\nThas was pi:writeChars\n");
out2.writeBytes("Thas was pi:writeByte\n");
out2.close();
DataInputStream in5 = new DataInputStream( new BufferedInputStream(new FileInputStream("F:\\java\\ Data.txt")));
BufferedReader in5br = new BufferedReader( new InputStreamReader(in5));
System.out.println(in5.readDouble());
System.out.println(in5br.readLine());
System.out.println(in5br.readLine());
} catch(EOFException e){
System.out.println("End of stream");
}

//6. 閫氳繃RandomAccessFile鎿嶄綔鏂囦歡
//閫氳繃RandomAccessFile綾誨規枃浠惰繘琛屾搷浣溿
RandomAccessFile rf =new RandomAccessFile("F:\\java\\ rtest.dat", "rw");
for(int i=0; i<10; i++)
rf.writeDouble(i*1.414);
rf.close();

rf = new RandomAccessFile("F:\\java\\ rtest.dat", "r");
for(int i=0; i<10; i++)
System.out.println("Value " + i + "錛" + rf.readDouble());
rf.close();

rf = new RandomAccessFile("F:\\java\\ rtest.dat", "rw");
rf.seek(5*8);
rf.writeDouble(47.0001);
rf.close();

rf = new RandomAccessFile("F:\\java\\ rtest.dat", "r");
for(int i=0; i<10; i++)
ystem.out.println("Value " + i + "錛" + rf.readDouble());
rf.close();
}
}

涓銆佹傚康Java涓瀵規枃浠剁殑鎿嶄綔鏄浠ユ祦鐨勬柟寮忚繘琛岀殑銆傛祦鏄疛ava鍐呭瓨涓鐨勪竴緇勬湁搴忔暟鎹搴忓垪銆侸ava灝嗘暟鎹浠庢簮錛堟枃浠躲佸唴瀛樸侀敭鐩樸佺綉緇滐級璇誨叆鍒板唴瀛樹腑錛屽艦鎴愪簡嫻侊紝鐒跺悗灝嗚繖浜涙祦榪樺彲浠ュ啓鍒板彟澶栫殑鐩鐨勫湴錛堟枃浠躲佸唴瀛樸佹帶鍒跺彴銆佺綉緇滐級錛屼箣鎵浠ョО涓烘祦錛屾槸鍥犱負榪欎釜鏁版嵁搴忓垪鍦ㄤ笉鍚屾椂鍒繪墍鎿嶄綔鐨勬槸婧愮殑涓嶅悓閮ㄥ垎銆備簩銆佸垎綾繪祦鐨勫垎綾伙紝Java鐨勬祦鍒嗙被姣旇緝涓板瘜錛屽垰鎺ヨЕ鐨勪漢鐪嬩簡鍚庝細鎰熻夊緢鏅曘傛祦鍒嗙被鐨勬柟寮忓緢澶氾細1銆佹寜鐓ц緭鍏ョ殑鏂瑰悜鍒嗭紝杈撳叆嫻佸拰杈撳嚭嫻侊紝杈撳叆杈撳嚭鐨勫弬鐓у硅薄鏄疛ava紼嬪簭銆2銆佹寜鐓у勭悊鏁版嵁鐨勫崟浣嶄笉鍚屽垎錛屽瓧鑺傛祦鍜屽瓧絎︽祦錛屽瓧鑺傛祦璇誨彇鐨勬渶灝忓崟浣嶆槸涓涓瀛楄妭錛1byte=8bit錛夛紝鑰屽瓧絎︽祦涓嬈″彲浠ヨ誨彇涓涓瀛楃︼紙1char = 2byte = 16bit錛夈3銆佹寜鐓у姛鑳界殑涓嶅悓鍒嗭紝鍒嗚妭鐐規祦鍜屽勭悊嫻侊紝鑺傜偣嫻佹槸鐩存帴浠庝竴涓婧愯誨啓鏁版嵁鐨勬祦錛堣繖涓嫻佹病鏈夌粡榪囧寘瑁呭拰淇楗幫級錛屽勭悊嫻佹槸鍦ㄥ硅妭鐐規祦灝佽呯殑鍩虹涓婄殑涓縐嶆祦錛孎ileInputStream鏄涓涓鎺ョ偣嫻侊紝鍙浠ョ洿鎺ヤ粠鏂囦歡璇誨彇鏁版嵁錛屼絾鏄疊ufferedInputStream鍙浠ュ寘瑁匜ileInputStream錛屼嬌寰楀叾鏈夌紦鍐插姛鑳姐傚叾瀹為櫎浜嗕互涓婁笁縐嶅垎綾誨栵紝榪樻湁涓浜涘父甯稿惉鍒扮殑涓浜涘垎綾繪瘮濡傦細瀵硅薄嫻併佺紦鍐叉祦銆佸帇緙╂祦銆佹枃浠舵祦絳夌瓑銆傚叾瀹為兘鏄鑺傜偣嫻佸拰澶勭悊嫻佺殑瀛愬垎綾匯傚綋鐒朵綘涔熷彲浠ュ壋寤烘柊鐨勬祦綾誨瀷錛屽彧瑕佷綘闇瑕併備笁銆佹祦鍒嗙被鐨勫叧緋諱笉綆℃祦鐨勫垎綾繪槸澶氫箞鐨勪赴瀵屽拰澶嶆潅錛屽叾鏍規簮鏉ヨ嚜浜庡洓涓鍩烘湰鐨勭被銆傝繖涓鍥涗釜綾葷殑鍏崇郴濡備笅錛

瀛楄妭嫻侊細

瀛楄妭嫻佹槸鏈鍩烘湰鐨勬祦錛屾枃浠剁殑鎿嶄綔銆佺綉緇滄暟鎹鐨勪紶杈撶瓑絳夐兘渚濊禆浜庡瓧鑺傛祦銆傝屽瓧絎︽祦甯稿父鐢ㄤ簬璇誨彇鏂囨湰綾誨瀷鐨勬暟鎹鎴栧瓧絎︿覆嫻佺殑鎿嶄綔絳夌瓑銆 鍏充簬瀛楄妭嫻佺殑API錛屾病浠涔堝ソ璇寸殑錛岀湅鐪嬪氨鐭ラ亾浜嗐傝繖閲屾寫鍑犱釜鍏抽敭鐐癸細涓銆両nputStream鐨凙PI1銆乸ublic int read()浠庤緭鍏ユ祦璇誨彇涓嬩竴涓鏁版嵁瀛楄妭銆傝繑鍥 0 鍒 255 鑼冨洿鍐呯殑 int 瀛楄妭鍊箋傚傛灉鍥犲凡鍒拌揪嫻佹湯灝捐屾病鏈夊彲鐢ㄧ殑瀛楄妭錛屽垯榪斿洖鍊 -1銆2銆乸ublic int read(byte[] b)浠庤緭鍏ユ祦涓璇誨彇涓瀹氭暟閲忕殑瀛楄妭騫跺皢鍏跺瓨鍌ㄥ湪緙撳啿鍖烘暟緇 b 涓銆備互鏁存暟褰㈠紡榪斿洖瀹為檯璇誨彇鐨勫瓧鑺傛暟銆傚傛灉鍥犱負嫻佷綅浜庢枃浠舵湯灝捐屾病鏈夊彲鐢ㄧ殑瀛楄妭錛屽垯榪斿洖鍊 -1錛涘惁鍒欙紝鑷沖皯鍙浠ヨ誨彇涓涓瀛楄妭騫跺皢鍏跺瓨鍌ㄥ湪 b 涓銆傛ゆ柟娉曠瓑鍚屼簬read(b, 0, b.length)3銆乸ublic int read(byte[] b, int off, int len)灝嗚緭鍏ユ祦涓鏈澶 len 涓鏁版嵁瀛楄妭璇誨叆瀛楄妭鏁扮粍銆傚皾璇曡誨彇澶氳揪 len 瀛楄妭錛屼絾鍙鑳借誨彇杈冨皯鏁伴噺銆備互鏁存暟褰㈠紡榪斿洖瀹為檯璇誨彇鐨勫瓧鑺傛暟銆傚傛灉鐢變簬宸插埌杈炬祦鏈灝捐屼笉鍐嶆湁鏁版嵁錛屽垯榪斿洖 -1銆傚弬鏁幫細b - 璇誨叆鏁版嵁鐨勭紦鍐插尯銆俹ff - 鍦ㄥ叾澶勫啓鍏ユ暟鎹鐨勬暟緇 b 鐨勫垵濮嬪嚲縐婚噺銆俵en - 瑕佽誨彇鐨勬渶澶у瓧鑺傛暟銆備簩銆丱utputStream鐨凙PI1銆乸ublic void write(int b)灝嗘寚瀹氱殑瀛楄妭鍐欏叆姝よ緭鍑烘祦銆倃rite 鐨勫父瑙勫崗瀹氭槸錛氬悜杈撳嚭嫻佸啓鍏ヤ竴涓瀛楄妭銆傝佸啓鍏ョ殑瀛楄妭鏄鍙傛暟 b 鐨勫叓涓浣庝綅銆俠 鐨 24 涓楂樹綅灝嗚蹇界暐銆2銆乸ublic void write(byte[] b)灝 b.length 涓瀛楄妭浠庢寚瀹氱殑瀛楄妭鏁扮粍鍐欏叆姝よ緭鍑烘祦銆倃rite(b) 鐨勫父瑙勫崗瀹氭槸錛氬簲璇ヤ笌璋冪敤 write(b, 0, b.length) 鐨勬晥鏋滃畬鍏ㄧ浉鍚屻3銆乸ublic void write(byte[] b, int off, int len)灝嗘寚瀹氬瓧鑺傛暟緇勪腑浠庡嚲縐婚噺 off 寮濮嬬殑 len 涓瀛楄妭鍐欏叆姝よ緭鍑烘祦銆倃rite(b, off, len) 鐨勫父瑙勫崗瀹氭槸錛氬皢鏁扮粍 b 涓鐨勬煇浜涘瓧鑺傛寜欏哄簭鍐欏叆杈撳嚭嫻侊紱鍏冪礌 b[off] 鏄姝ゆ搷浣滃啓鍏ョ殑絎涓涓瀛楄妭錛宐[off+len-1] 鏄姝ゆ搷浣滃啓鍏ョ殑鏈鍚庝竴涓瀛楄妭銆傚弬鏁幫細b - 鏁版嵁銆俹ff - 鏁版嵁涓鐨勫垵濮嬪嚲縐婚噺銆俵en - 瑕佸啓鍏ョ殑瀛楄妭鏁般4銆乸ublic void flush()鍒鋒柊姝よ緭鍑烘祦騫跺己鍒跺啓鍑烘墍鏈夌紦鍐茬殑杈撳嚭瀛楄妭銆俧lush 鐨勫父瑙勫崗瀹氭槸錛氬傛灉姝よ緭鍑烘祦鐨勫疄鐜板凡緇忕紦鍐蹭簡浠ュ墠鍐欏叆鐨勪換浣曞瓧鑺傦紝鍒欒皟鐢ㄦゆ柟娉曟寚紺哄簲灝嗚繖浜涘瓧鑺傜珛鍗沖啓鍏ュ畠浠棰勬湡鐨勭洰鏍囥備笁銆佸嚑鐐瑰師鍒1銆佷笉綆℃槸杈撳叆榪樻槸杈撳嚭嫻侊紝浣跨敤瀹屾瘯鍚庤乧lose()錛屽傛灉鏄甯︽湁緙撳啿鍖虹殑杈撳嚭嫻侊紝搴斿湪鍏抽棴鍓嶈皟鐢╢lush()銆2銆佸簲璇ュ敖鍙鑳戒嬌鐢ㄧ紦鍐插尯錛屾潵鍑忓皯IO嬈℃暟錛屼互鎻愰珮鎬ц兘銆3銆佽兘鐢ㄥ瓧絎︽祦澶勭悊鐨勪笉鐢ㄥ瓧鑺傛祦銆傚洓銆佷緥瀛愪笅闈㈡槸涓涓鎿嶄綔瀛楄妭嫻佺殑渚嬪瓙錛氳佹搷浣滅殑鏂囨湰鏂囦歡x.txt);
fos = new FileOutputStream(\"C:\\\\x.txt\");
long num = 0; //璇誨彇瀛楄妭璁℃暟
int bt = 0; //姣忔¤誨叆瀛楄妭鍐呭
//褰撹誨叆鏂囦歡鏈灝炬椂錛岃誨叆鏁版嵁鐨勫間負-1
//姣忔¤誨叆涓涓瀛楄妭錛屽瓨鏀懼埌鍙橀噺bt涓錛岀洿鍒拌誨畬鏁翠釜鏂囦歡
while ((bt = fis.read()) != -1) {
// System.out.print(bt); //浠ユ暟瀛楃殑褰㈠紡閫愪釜杈撳嚭鏂囦歡鐨勬瘡涓瀛楄妭
System.out.print((char) bt); //浠ュ瓧姣嶇殑褰㈠紡閫愪釜杈撳嚭鏂囦歡鐨勬瘡涓瀛楄妭
fos.write(bt); //灝嗗瓧鑺傚啓鍏ヨ緭鍑烘祦涓錛屽疄鐜版枃浠剁殑鍔熻兘
num++;
}
System.out.println(\"璇誨彇鐨勫瓧鑺傛暟涓\" + num);
fis.close();
fos.close();
} catch (FileNotFoundException e) {
System.out.println(\"鎵句笉鍒版寚瀹氱殑鏂囦歡錛\");
e.printStackTrace();
} catch (IOException e) {
System.out.println(\"鏂囦歡璇誨彇鏃跺彂鐢烮O寮傚父錛\");
e.printStackTrace();
}
}

/**
* 緙撳啿鐨勫瓧鑺傛祦嫻嬭瘯
*/
public static void testBufferedStream() {
int buffer = 10; //緙撳啿澶у皬
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(\"C:\\\\x.txt\"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(\"C:\\\\bf2.txt\"));
int bench = 0;
byte bts[] = new byte[buffer]; //鍒涘緩瀛楄妭嫻佺紦瀛
while ((bis.read(bts)) != -1) {
bos.write(bts); //灝嗗瓧鑺傚啓鍏ヨ緭鍑烘祦涓錛屽疄鐜版枃浠剁殑鍔熻兘
bench++;
}
System.out.println(\"bench=\" + bench);
//灝嗚緭鍏ユ祦緙撳啿鍖轟腑鐨勬暟鎹鍏ㄩ儴鍐欏嚭錛堝崈涓囪頒綇)
bos.flush();
bis.close();
bos.close();
} catch (FileNotFoundException e) {
System.out.println(\"鎵句笉鍒版寚瀹氱殑鏂囦歡錛\");
e.printStackTrace();
} catch (IOException e) {
System.out.println(\"鏂囦歡璇誨彇鏃跺彂鐢烮O寮傚父錛\");
e.printStackTrace();
}
}

/**
* 瀛楄妭嫻佺殑閫夋嫨璇誨彇嫻嬭瘯
*/
public static void testSelectStream() {
OutputStream fos = null;
int buffer = 25;
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(\"C:\\\\x.txt\"));
fos = new FileOutputStream(\"C:\\\\testSelectStream.txt\");

byte bts[] = new byte[buffer]; //鍒涘緩緙撳瓨
//浠庤緭鍏ユ祦鐨勭5涓瀛楄妭寮濮嬶紝寰鍚庤誨彇10涓瀛楄妭錛屽瓨鏀懼埌緙撳瓨bts涓
//榪欎釜鏂規硶鏈変釜闄烽槺錛岀紦瀛榖uffer鐨勫ぇ灝忔渶灝忎負鈥滃嚲縐婚噺+瑕佽誨彇瀛楄妭鏁扳濓紝鍦ㄦ℃渶灝忓簲璇ヤ負15錛屽惁鍒欐姏IndexOutOfBoundsException寮傚父
bis.read(bts, 5, 10);
//灝嗗瓧鑺傚啓鍏ヨ緭鍑烘祦涓錛屽疄鐜版枃浠剁殑鍔熻兘
fos.write(bts);

bis.close();
fos.close();
} catch (FileNotFoundException e) {
System.out.println(\"鎵句笉鍒版寚瀹氱殑鏂囦歡錛\");
e.printStackTrace();
} catch (IOException e) {
System.out.println(\"鏂囦歡璇誨彇鏃跺彂鐢烮O寮傚父錛\");
e.printStackTrace();
}
}
}娉ㄦ剰浜嗭細1銆佺紦鍐茬殑鍔熻兘搴旇ラ氳繃鐩稿簲鐨勭紦鍐叉祦鏉ュ寘瑁呭師濮嬫祦鏉ュ疄鐜幫紝鑰屼笉鏄鑷宸辮繛緇澶氭℃暟鎹錛屾渶鍚庡啓鍒頒竴涓鏁扮粍涓錛岃繖鏄寰堟剼鏄х殑鍋氭硶錛堜絾鏄榪樻湁寰堝氫漢鍦ㄧ敤錛夈2銆乺ead(byte[] b, int off, int len)榪欎釜鏂規硶瑕佸ソ濂戒綋浼氫簡錛屽線寰鍜屼綘鎯寵薄鐨勪笉涓鏍楓3銆佸皢璇誨彇鐨勪竴涓瀛楄妭寮哄埗杞鎹涓篶har鏄涓嶅悎閫傜殑錛岄櫎闈炰綘鎯崇湅鐪嬭兘杈撳嚭浠涔堛

瀛楃︽祦錛

瀛楃︽祦鐨勫勭悊鍜屽瓧鑺傛祦宸涓嶅氾紝API鍩烘湰涓婂畬鍏ㄤ竴鏍鳳紝灝辨槸璁¢噺鍗曚綅涓嶅悓銆傚彟澶栧瓧絎︽祦榪樻彁渚涗竴浜涘叾浠栫殑澶勭悊嫻侊紝姣斿傛寜琛岃誨彇嫻併佸瓧絎︿覆嫻佺瓑絳夈備笅闈㈢粰涓渚嬪瓙鐪嬬湅錛
import java.io.*;/**
* 瀛楃︽祦嫻嬭瘯
* @author 2008-8-27 22:16:44
*/
public class TestIOStream {
public static void main(String[] args) {
testReaderWriter();
testLineNumberReader();
} /**
* 甯︾紦鍐茬殑瀛楃︽祦
*/
public static void testReaderWriter() {
int bufsize = 25;
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(\"C:\\\\x.txt\")));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(new File(\"C:\\\\xb.txt\"))); char buf[] = new char[bufsize]; //瀛楃︾紦鍐插尯
while (bufferedReader.read(buf) != -1) {
bufferedWriter.write(buf);
}
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close(); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 鎸夎岃誨彇鐨勫瓧絎︽祦
*/
public static void testLineNumberReader() {
try {
LineNumberReader lineNumberReader = new LineNumberReader(new BufferedReader(new FileReader(new File(\"C:\\\\x.txt\")))); String lineString; //琛屽瓧絎︿覆鍙橀噺
int x = 0; //琛屽彿
while ((lineString = lineNumberReader.readLine()) != null) {
x++;
System.out.println(\"琛屽彿錛\" + x + \" >>>\" + lineString);
}
lineNumberReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

榪愯岀粨鏋滐細
琛屽彿錛1 >>>鐧芥棩渚濆北灝斤紝榛勬渤鍏ユ搗嫻併
琛屽彿錛2 >>>嬈茬┓鍗冮噷鐩錛屾洿涓婁竴灞傛ゼ銆
琛屽彿錛3 >>>
琛屽彿錛4 >>>鈥斺 鐜嬩箣娑c婄櫥楣抽泙妤箋

⑦ java.io的Java流輸入輸出原理

Java把這些不同來源和目標的數據都統一抽象為數據流。Java語言的輸入輸出功能是十分強大而靈活的,美中不足的是看上去輸入輸出的代碼並不是很簡潔,因為你往往需要包裝許多不同的對象。
在Java類庫中,IO部分的內容是很龐大的,因為它涉及的領域很廣泛:標准輸入輸出,文件的操作,網路上的數據流,字元串流,對象流,zip文件流。 按流向分:
輸入流: 程序可以從中讀取數據的流。
輸出流: 程序能向其中寫入數據的流。
按數據傳輸單位分:
位元組流: 以位元組為單位傳輸數據的流
字元流: 以字元為單位傳輸數據的流
按功能分:
節點流: 用於直接操作目標設備的流
過濾流: 是對一個已存在的流的鏈接和封裝,通過對數據進行處理為程序提供功能強大、靈活的讀寫功能。 JDK所提供的所有流類位於java.io包中,都分別繼承自以下四種抽象流類。
InputStream:繼承自InputStream的流都是用於向程序中輸入數據的,且數據單位都是位元組(8位)。
OutputStream:繼承自OutputStream的流都是程序用於向外輸出數據的,且數據單位都是位元組(8位)。
Reader:繼承自Reader的流都是用於向程序中輸入數據的,且數據單位都是字元(16位)。
Writer:繼承自Writer的流都是程序用於向外輸出數據的,且數據單位都是字元(16位)。 BufferedInputStream BufferedInputStream 為另一個輸入流添加一些功能,即緩沖輸入以及支持 mark 和 reset 方法的能力。 BufferedOutputStream 該類實現緩沖的輸出流。 BufferedReader 從字元輸入流中讀取文本,緩沖各個字元,從而實現字元、數組和行的高效讀取。 BufferedWriter 將文本寫入字元輸出流,緩沖各個字元,從而提供單個字元、數組和字元串的高效寫入。 ByteArrayInputStream ByteArrayInputStream 包含一個內部緩沖區,該緩沖區包含從流中讀取的位元組。 ByteArrayOutputStream 此類實現了一個輸出流,其中的數據被寫入一個 byte 數組。 CharArrayReader 此類實現一個可用作字元輸入流的字元緩沖區。 CharArrayWriter 此類實現一個可用作 Writer 的字元緩沖區。 Console 此類包含多個方法,可訪問與當前 Java 虛擬機關聯的基於字元的控制台設備(如果有)。 DataInputStream 數據輸入流允許應用程序以與機器無關方式從底層輸入流中讀取基本 Java 數據類型。 DataOutputStream 數據輸出流允許應用程序以適當方式將基本 Java 數據類型寫入輸出流中。 File 文件和目錄路徑名的抽象表示形式。 FileDescriptor 文件描述符類的實例用作與基礎機器有關的某種結構的不透明句柄,該結構表示開放文件、開放套接字或者位元組的另一個源或接收者。 FileInputStream FileInputStream 從文件系統中的某個文件中獲得輸入位元組。 FileOutputStream 文件輸出流是用於將數據寫入 File 或 FileDescriptor 的輸出流。 FilePermission 此類表示對文件和目錄的訪問。 FileReader 用來讀取字元文件的便捷類。 FileWriter 用來寫入字元文件的便捷類。 FilterInputStream FilterInputStream 包含其他一些輸入流,它將這些流用作其基本數據源,它可以直接傳輸數據或提供一些額外的功能。 FilterOutputStream 此類是過濾輸出流的所有類的超類。 FilterReader 用於讀取已過濾的字元流的抽象類。 FilterWriter 用於寫入已過濾的字元流的抽象類。 InputStream 此抽象類是表示位元組輸入流的所有類的超類。 InputStreamReader InputStreamReader 是位元組流通向字元流的橋梁:它使用指定的 charset 讀取位元組並將其解碼為字元。 LineNumberInputStream 已過時。此類錯誤假定位元組能充分表示字元。

閱讀全文

與java的輸入輸出流包括哪些類型相關的資料

熱點內容
沈陽哪裡適合學編程 瀏覽:811
django19常用版本 瀏覽:521
三國志11保存在哪個文件夾 瀏覽:88
iphone4s加速 瀏覽:108
編程內存和顯卡哪個重要 瀏覽:672
android連接網路列印機 瀏覽:195
linuxsftp如何上傳文件 瀏覽:603
蘋果文件覆蓋 瀏覽:327
網路足彩名人有哪些 瀏覽:639
pc共享網路給電腦 瀏覽:796
linuxkill重啟進程 瀏覽:658
sketchup景觀教程 瀏覽:730
win10管理找不到模塊 瀏覽:472
蘋果手機查看電腦文件 瀏覽:61
微信不訪問視頻文件夾嗎 瀏覽:259
文件夾加密大師注冊碼 瀏覽:1
onedrive怎麼上傳文件 瀏覽:488
android多線程寫文件棧溢出 瀏覽:242
台電酷閃量產工具 瀏覽:837
如何破壞文件 瀏覽:15

友情鏈接