亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java--IO流(InputStream,OutputStream,拷貝)

2019-11-06 06:03:01
字體:
來源:轉載
供稿:網友

一、IO流概述及其分類

1、概念

IO流用來處理設備之間的數據傳輸

java對數據的操作是通過流的方式

Java用于操作流的類都在IO包中

流按流向分為兩種:輸入流,輸出流。

流按操作類型分為兩種:

字節流 : 字節流可以操作任何數據,因為在計算機中任何數據都是以字節的形式存儲的

字符流 : 字符流只能操作純字符數據,比較方便。

2、IO流常用父類

字節流的抽象父類:

InputStream 

OutputStream

字符流的抽象父類:

Reader 

Writer

3、IO程序書寫

使用前,導入IO包中的類

使用時,進行IO異常處理

使用后,釋放資源

4、read()方法讀取的是一個字節,為什么返回是int,而不是byte

因為字節輸入流可以操作任意類型的文件,比如圖片音頻等,這些文件底層都是以二進制形式的存儲的,

如果每次讀取都返回byte,有可能在讀到中間的時候遇到111111111

那么這11111111是byte類型的-1,我們的程序是遇到-1就會停止不讀了,后面的數據就讀不到了,

所以在讀取的時候用int類型接收,如果11111111會在其前面補上

24個0湊足4個字節,那么byte類型的-1就變成int類型的255了這樣可以保證整個數據讀完,而結束標記的-1就是int類型

二、字節數組拷貝

1、int read(byte[] b):一次讀取一個字節數組

2、write(byte[] b):一次寫出一個字節數組

3、available()獲取讀的文件所有的字節個數

4、小數組

write(byte[] b)

write(byte[] b,int off, int len)寫出有效的字節個數

三、BufferedInputStream和BufferOutputStream拷貝

1、緩沖思想

字節流一次讀寫一個數組的速度明顯比一次讀寫一個字節的速度快很多,

這是加入了數組這樣的緩沖區效果,java本身在設計的時候,

也考慮到了這樣的設計思想(裝飾設計模式后面講解),所以提供了字節緩沖區流

2、BufferedInputStream

BufferedInputStream內置了一個緩沖區(數組)

從BufferedInputStream中讀取一個字節時

BufferedInputStream會一次性從文件中讀取8192個, 存在緩沖區中, 返回給程序一個

程序再次讀取時, 就不用找文件了, 直接從緩沖區中獲取

直到緩沖區中所有的都被使用過, 才重新從文件中讀取8192個

3、BufferedOutputStream

BufferedOutputStream也內置了一個緩沖區(數組)

程序向流中寫出字節時, 不會直接寫到文件, 先寫到緩沖區中

直到緩沖區寫滿, BufferedOutputStream才會把緩沖區中的數據一次性寫到文件里4、小數組的讀寫和帶Buffered的讀取哪個更快?

定義小數組如果是8192個字節大小和Buffered比較的話

定義小數組會略勝一籌,因為讀和寫操作的是同一個數組

而Buffered操作的是兩個數組

四、flush和close方法區別

1、close具備刷新功能,在關閉流之前,就會先刷新一次緩沖區,將緩沖區的字節全部刷新到文件上,再關閉,且刷新完之后不能再寫了

2、flush具備刷新功能,刷新完之后可以繼續寫

五、字節流讀寫中文

字節流讀取中文的問題

字節流在讀中文的時候有可能會讀到半個中文,造成亂碼 

字節流寫出中文的問題

字節流直接操作的字節,所以寫出中文必須將字符串轉換成字節數組 

寫出回車換行 write("/r/n".getBytes());

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class FileInputStreamClass {	public static void main(String[] args) throws IOException {		/*		 	一、IO流概述及其分類		 	1、概念				IO流用來處理設備之間的數據傳輸				Java對數據的操作是通過流的方式				Java用于操作流的類都在IO包中				流按流向分為兩種:輸入流,輸出流。				流按操作類型分為兩種:					字節流 : 字節流可以操作任何數據,因為在計算機中任何數據都是以字節的形式存儲的					字符流 : 字符流只能操作純字符數據,比較方便。			2、IO流常用父類				字節流的抽象父類:					InputStream 					OutputStream				字符流的抽象父類:					Reader 					Writer					3、IO程序書寫				使用前,導入IO包中的類				使用時,進行IO異常處理				使用后,釋放資源			4、read()方法讀取的是一個字節,為什么返回是int,而不是byte			   因為字節輸入流可以操作任意類型的文件,比如圖片音頻等,這些文件底層都是以二進制形式的存儲的,			如果每次讀取都返回byte,有可能在讀到中間的時候遇到111111111			那么這11111111是byte類型的-1,我們的程序是遇到-1就會停止不讀了,后面的數據就讀不到了,			所以在讀取的時候用int類型接收,如果11111111會在其前面補上			24個0湊足4個字節,那么byte類型的-1就變成int類型的255了這樣可以保證整個數據讀完,而結束標記的-1就是int類型			二、字節數組拷貝			1、int read(byte[] b):一次讀取一個字節數組			2、write(byte[] b):一次寫出一個字節數組			3、available()獲取讀的文件所有的字節個數			4、小數組			   write(byte[] b)			   write(byte[] b, int off, int len)寫出有效的字節個數			三、BufferedInputStream和BufferOutputStream拷貝			1、緩沖思想			      字節流一次讀寫一個數組的速度明顯比一次讀寫一個字節的速度快很多,			      這是加入了數組這樣的緩沖區效果,java本身在設計的時候,			      也考慮到了這樣的設計思想(裝飾設計模式后面講解),所以提供了字節緩沖區流			2、BufferedInputStream			  BufferedInputStream內置了一個緩沖區(數組)			     從BufferedInputStream中讀取一個字節時			  BufferedInputStream會一次性從文件中讀取8192個, 存在緩沖區中, 返回給程序一個			     程序再次讀取時, 就不用找文件了, 直接從緩沖區中獲取			     直到緩沖區中所有的都被使用過, 才重新從文件中讀取8192個			3、BufferedOutputStream			  BufferedOutputStream也內置了一個緩沖區(數組)			     程序向流中寫出字節時, 不會直接寫到文件, 先寫到緩沖區中			     直到緩沖區寫滿, BufferedOutputStream才會把緩沖區中的數據一次性寫到文件里			4、小數組的讀寫和帶Buffered的讀取哪個更快?				定義小數組如果是8192個字節大小和Buffered比較的話				定義小數組會略勝一籌,因為讀和寫操作的是同一個數組				而Buffered操作的是兩個數組		    四、flush和close方法區別		    1、close具備刷新功能,在關閉流之前,就會先刷新一次緩沖區,將緩沖區的字節全部刷新到文件上,再關閉,且刷新完之后不能再寫了		    2、flush具備刷新功能,刷新完之后可以繼續寫		    五、字節流讀寫中文			   字節流讀取中文的問題				  字節流在讀中文的時候有可能會讀到半個中文,造成亂碼 			   字節流寫出中文的問題				  字節流直接操作的字節,所以寫出中文必須將字符串轉換成字節數組 				  寫出回車換行 write("/r/n".getBytes());		 * */		fileInputStream();//字節輸入流		fileOutputStream();//字節輸出流		copyImages();//復制圖片		littleArray();		buffer();		writeChinese();		exceptionForjdk16();//jdk1.6以及以前版本處理異常		exceptionForjdk17();//jdk1.7版本處理異常	}	public static void exceptionForjdk17() {		try(FileInputStream fis = new FileInputStream("ccc.txt");			FileOutputStream fos = new FileOutputStream("ddd.txt");			//具備自動關閉流的功能			MyClose myClose = new MyClose();			/*原理			在try()中創建的流對象必須實現了AutoCloseable這個接口,如果實現了,在try后面的{}			(讀寫代碼)執行后就會自動調用,流對象的close方法將流關掉*/		){			int b;			while((b = fis.read()) != -1){				fos.write(b);			}		} catch (FileNotFoundException e) {			e.PRintStackTrace();		} catch (IOException e) {			e.printStackTrace();		}	}	public static void exceptionForjdk16() {		FileInputStream fis = null;		FileOutputStream fos = null;		try{			fis = new FileInputStream("aaa.txt");			fos = new FileOutputStream("bbb.txt");			int b;			while((b = fis.read()) != -1){				fos.write(b);			}		} catch (IOException e) {			e.printStackTrace();		}finally {			try{				if (fis != null)					fis.close();			} catch (IOException e) {				e.printStackTrace();			} finally {				if (fos != null)					try {						fos.close();					} catch (IOException e) {						e.printStackTrace();					}			}		}	}	private static void writeChinese() throws IOException {		FileOutputStream fos = new FileOutputStream("aa.txt");		fos.write("我讀書少".getBytes());		fos.close();	}	private static void buffer() throws IOException {		FileInputStream fis = new FileInputStream("a.txt");		FileOutputStream fos = new FileOutputStream("e.txt");		BufferedInputStream bis = new BufferedInputStream(fis);		BufferedOutputStream bos = new BufferedOutputStream(fos);		int b;		while((b=bis.read()) != -1){			bos.write(b);		}		bis.close();		bos.close();	}	private static void littleArray() throws IOException {		System.out.println("==============小數組=============");		FileInputStream fis = new FileInputStream("c.txt");		FileOutputStream fos = new FileOutputStream("d.txt");//		byte[] arr = new byte[2];		byte[] arr = new byte[1024 * 8];//標準寫法		int len;		while((len = fis.read(arr)) != -1){ //如果此處忘記加arr,返回的就不是讀取的字節個數,而是字節的碼表值			fos.write(arr, 0, len);//寫入有效文件		}		fis.close();		fos.close();	}	private static void copyImages() throws IOException {		System.out.println("==============拷貝圖片=============");		FileInputStream fis = new FileInputStream("11.jpg");		FileOutputStream fos = new FileOutputStream("copy.jpg");				//第一種方法:讀一點寫一點,效率低下//		int b;//		while((b = fis.read()) != -1){  //不斷的讀取每一個字節//			fos.write(b);   //將字節不斷地寫出//		}//		fis.close();//		fos.close();				//第二種方法:一次性讀出寫入,如果內存過大導致內存溢出		FileOutputStream fos1 = new FileOutputStream("copy1.jpg");		byte[] arr = new byte[fis.available()];   //創建與文件一樣大小的字節數組		fis.read(arr);            //將文件上的字節數據一次性讀取到內存中		fos1.write(arr);          //將字節數組中的字節數據一次性寫到文件上		fis.close();		fos1.close();	}	private static void fileOutputStream() throws IOException {		System.out.println("==============字節輸出流=============");		FileOutputStream fis = new FileOutputStream("b.txt",true);		//如果想續寫在第二個參數傳true 		//創建字節流輸出對象文件,如果沒有自動創建一個;如果有此文件則先將文件清空		fis.write(97);   //雖然寫出的是一個int數,但是到文件上的是一個字節,會自動去掉前三個8位//		fis.write(98);//		fis.write(99);		fis.write(100);		fis.close();	}	public static void fileInputStream() throws FileNotFoundException, IOException {		System.out.println("==============字節輸入流=============");		FileInputStream fis = new FileInputStream("a.txt");		int b;		while((b = fis.read()) != -1){   //文件結束標記為-1			System.out.print(b +" ");		}		fis.close();// 關流釋放資源		System.out.println();	}}class MyClose implements AutoCloseable{	public void close(){		System.out.println("我調用了close方法");	}}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91大神在线播放精品| 欧美国产精品日韩| 亚洲最大成人网色| 日韩av网址在线| 日韩视频免费在线观看| 成人精品aaaa网站| 久久综合亚洲社区| 日韩精品亚洲精品| 欧美精品中文字幕一区| 欧美国产亚洲精品久久久8v| www国产精品com| 一本色道久久88亚洲综合88| 亚洲欧美日韩天堂一区二区| 亚洲精品久久视频| 欧美精品video| 国产日韩中文字幕| 日韩亚洲在线观看| 欧美日韩免费观看中文| 亚洲午夜女主播在线直播| 精品国内自产拍在线观看| 国产精品久久久久不卡| 国产亚洲视频在线| 性欧美办公室18xxxxhd| 亚洲激情久久久| 国产中文日韩欧美| 日韩av色在线| 亚洲色图综合网| 欧美成人精品影院| 欧美中文字幕在线播放| 日韩亚洲欧美中文在线| 久久久亚洲福利精品午夜| 国产一区二中文字幕在线看| 国模gogo一区二区大胆私拍| 日本亚洲欧美成人| 成人福利视频网| 国产精品户外野外| 欧美精品久久久久久久久| 色妞欧美日韩在线| 一本色道久久88综合日韩精品| 中文字幕日韩在线播放| 国产色视频一区| 91沈先生在线观看| 国产激情综合五月久久| 午夜欧美不卡精品aaaaa| 久久视频在线直播| 国产精品盗摄久久久| 91av在线国产| 日韩午夜在线视频| 久久久久久久久久久av| 日韩激情av在线免费观看| 日韩av影视在线| 久久久精品电影| 亚洲欧美中文另类| 国产精品美女主播| 91av网站在线播放| 精品国产欧美一区二区三区成人| 亚洲欧美在线免费观看| 欧美成aaa人片免费看| 亚洲成色999久久网站| 成人女保姆的销魂服务| 国产日韩欧美在线视频观看| 国产精品久久婷婷六月丁香| 欧美电影第一页| 91av中文字幕| 中文字幕亚洲色图| 日韩精品www| 97人人做人人爱| 欧美一区二区三区免费视| 57pao成人永久免费视频| 亚洲成人久久网| 欧美丰满老妇厨房牲生活| 日韩av在线一区二区| 欧美极品少妇与黑人| 日本精品一区二区三区在线播放视频| 国产精品久久国产精品99gif| 91av国产在线| 国产精品毛片a∨一区二区三区|国| 午夜欧美不卡精品aaaaa| 国产日韩精品一区二区| 国产精品www| 国产aⅴ夜夜欢一区二区三区| 国产综合在线视频| 国产精品久久二区| 国产成人精品综合久久久| 国产主播喷水一区二区| 日本久久中文字幕| 欧美午夜精品伦理| 国产精品流白浆视频| 久久欧美在线电影| 久久精品精品电影网| 欧美激情视频播放| 欧美日韩激情视频8区| 久久久精品欧美| 最近2019中文字幕第三页视频| 5252色成人免费视频| 欧美大片大片在线播放| 亚洲精品国产精品久久清纯直播| 欧美大肥婆大肥bbbbb| 欧美性做爰毛片| xvideos成人免费中文版| 自拍偷拍亚洲欧美| 成人伊人精品色xxxx视频| 久久久久久香蕉网| 日本aⅴ大伊香蕉精品视频| 日韩精品有码在线观看| 日韩欧美亚洲国产一区| 亚洲国产精品推荐| 成人两性免费视频| 美女性感视频久久久| 97香蕉久久夜色精品国产| 最近更新的2019中文字幕| 91国产精品91| 伊人精品在线观看| 久久中国妇女中文字幕| 日韩av黄色在线观看| 亚洲欧美精品一区| 色777狠狠综合秋免鲁丝| 国产欧美va欧美va香蕉在线| 91精品视频观看| 久久久精品视频成人| 中文字幕久热精品视频在线| 国产精品私拍pans大尺度在线| 国产极品精品在线观看| 国产精品∨欧美精品v日韩精品| 68精品国产免费久久久久久婷婷| 色阁综合伊人av| 久久精品视频中文字幕| 精品人伦一区二区三区蜜桃免费| 欧亚精品中文字幕| 国产91在线播放九色快色| 欧美激情va永久在线播放| 亚洲国产精品久久91精品| 国产极品精品在线观看| 亚洲欧美日韩中文视频| 欧美日韩在线视频一区二区| 97人人做人人爱| 96精品视频在线| 中文字幕亚洲欧美日韩2019| 成人黄色免费在线观看| 国产精品久久久久99| 欧美日韩亚洲91| 久久久久久久91| 亚洲天堂免费视频| 欧美极品少妇xxxxⅹ裸体艺术| 成人黄色免费网站在线观看| 成人午夜两性视频| 午夜精品在线视频| 亚洲激情免费观看| 久久久久久国产精品美女| 国产精品伦子伦免费视频| 亚洲精品成a人在线观看| 日韩欧美高清视频| 亚洲福利视频二区| 欧美激情按摩在线| 中文日韩电影网站| 国产日韩av在线播放| 一本色道久久88精品综合| 最新国产精品亚洲| 怡红院精品视频| 色悠悠久久久久| 国产日韩欧美在线| 91视频免费在线| 粉嫩av一区二区三区免费野| 亚洲日本成人女熟在线观看|