什么是流?
流:程序和設(shè)備之間連接起來(lái)的一根用于數(shù)據(jù)傳輸?shù)墓艿溃骶褪且桓艿馈?/p>
流的分類:
- 四大基本抽象流(輸入流,輸出流,字符流,字節(jié)流)
- 文件流
- 緩沖流
- 轉(zhuǎn)換流
- 數(shù)據(jù)流 流一定是類,但類不一定是流
- print流
- object流
按數(shù)據(jù)流的方向不同可以分為輸入流和輸出流。
按處理數(shù)據(jù)單位不同可以分為字節(jié)流和字符流。(一個(gè)字符是兩個(gè)字節(jié))
按功能不同可以分為節(jié)點(diǎn)(原始)流和處理(包裹)流。
字節(jié)流 字符流
輸入流 inputstream reader
輸出流 outputstream writer
文件流:
讀取一個(gè)文件內(nèi)容并將其輸出到顯示器上,并統(tǒng)計(jì)讀取出來(lái)的字節(jié)的個(gè)數(shù)。字符串來(lái)表示操作系統(tǒng)的文件路徑時(shí),我們可以使用\\和/兩種方式來(lái)作為文件夾的路徑分隔符。
什么是字節(jié)流?
fileinputstream fileoutputstream
什么是字符流?
filereader filewriter
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
eg: import java.awt.*; public class test{ public static void main(string[] args){ filereader fr= new fileread( "d:\\share\\test.java" ); filewriter fw= new filewrite( "d:/zhangsan.haha" ); int ch; ch=fr.read(); while (- 1 != ch){ fw.write(ch); //將test文件中fr的數(shù)據(jù)讀給程序,再將程序中的數(shù)據(jù)寫給fw的zhangsan文件夾中 ch=fr.read(); } fw.flush(); fr.close(); fw.close(); } } |
字符流和字節(jié)流的區(qū)別:
字節(jié)流可以完成所有格式文件的賦值
字符流值可以完成文本文件的復(fù)制,卻無(wú)法完成視頻格式文件的復(fù)制。
因?yàn)樽止?jié)是不需要解碼和編碼的,將字節(jié)轉(zhuǎn)化為字符才存在解碼和編碼的問(wèn)題。
字節(jié)流可以從所有格式的設(shè)備中讀取數(shù)據(jù),但字符流只能從文本格式的設(shè)備中讀寫數(shù)據(jù)。如果通過(guò)一個(gè)字節(jié)流把文本文件的內(nèi)容輸出到顯示器上,當(dāng)輸出漢字時(shí)就會(huì)出現(xiàn)亂碼。
緩沖流:buffered
緩沖流就是帶有緩沖區(qū)的輸入輸出流
緩沖流可以顯著的減少我們對(duì)io訪問(wèn)的次數(shù),保護(hù)我們的硬盤。
緩沖流本身就是處理流,必須依附于節(jié)點(diǎn)流,處理流是包裹在原始節(jié)點(diǎn)上的流,相當(dāng)于包括在管道上的管道。
bufferedinputstream :帶緩沖的輸出流,允許一次向硬盤寫入多個(gè)字節(jié)的數(shù)據(jù)
bufferedoutputstream :帶緩沖區(qū)的輸入流,允許一次向程序中讀入多個(gè)字節(jié)的數(shù)據(jù)
bufferedwriter bufferedreader可以提高讀寫文本文件內(nèi)容的速度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
eg: import java.awt.*; //帶緩沖區(qū)的字節(jié)流處理文件的速度要快于不帶緩沖區(qū)的字節(jié)流。 public class test{ public static void main(string[] args){ bufferedinputstream bis= new bufferedinputstream ( new fileread( "d:\\share\\test.java" )); bufferedoutputstream bos= new bufferedoutputstream ( new filewrite( "d:/zhangsan.haha" )); byte [] buf= new byte [ 1024 ]; int len; len=bis.read(buf); while (- 1 != len){ bos.write(buf, 0 ,len ); len=bis.read(buf); } bos.flush(); bos.close(); bis.close(); } } |
轉(zhuǎn)換流:
outputstreamwrite 流是把outputstrean流轉(zhuǎn)換成writer流的流
inputstreamreader 流是把inputstrean流轉(zhuǎn)換成reader流的流
print流:
print流只有輸出,沒(méi)有輸入
printwriter 輸出字符 printstream輸出字節(jié)
printwriter 與 printstream的區(qū)別:
printwriter提供了printstream的所有打印方法,既可以封裝outputstream,也能封裝writer.而printstream只能封裝outputstream類型的字節(jié)流。
標(biāo)準(zhǔn)輸入輸出的重定向:
編程實(shí)現(xiàn)將鍵盤輸入的數(shù)據(jù)輸入到a文件中,如果輸入有誤,則把出錯(cuò)信息輸出到b文件中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
eg: public class test{ public static void main(string[] args){ printstream psout= null ; printstream pserror= null ; scanner sc= null ; try { psout= new printstream( "d:/out.txt" ); pserror= new printstream( "d:/error.txt" ); sc= new scanner(system.in); int num; system.setout(psout); system.seterr(pserror); while ( true ){ num=sc.nextint(); system.out.println(num); } } catch (exception e){ system.out.println( "出錯(cuò)信息是:" ); e.printstacktrace(); } } } } |
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)服務(wù)器之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
原文鏈接:https://blog.csdn.net/mumu1998/article/details/81670581