日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流

發(fā)布時(shí)間:2023/12/29 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

字節(jié)流

  • 抽象類InputStream和OutputStream是字節(jié)流的頂級(jí)父類
  • 所有的字節(jié)輸入流都繼承自InputStream,所有的輸出流都繼承子OutputStream

InputStream的常用方法:

int read() int read(byte b[]) int read(byte b[], int off, int len) void close()

OutputStream的常用方法:

void write(int b) void write(byte b[]) void write(byte b[], int off, int len) void flush() void close()

注意:InputStream和OutputStream是抽象類,不能被實(shí)例化

InputStream和OutputStream提供不同的子類,這些子類的體系結(jié)構(gòu)圖如下:

字節(jié)流讀寫文件

概述:

在操作文件時(shí),最常見的就是從一個(gè)文件中讀取數(shù)據(jù)并將數(shù)據(jù)寫入到另一個(gè)文件,這一過(guò)程就是文件的讀寫,針對(duì)文件的讀寫操作,JDK專門提供兩個(gè)類,分別是FileInputStream和FileOutputStream

FileInputStream是InputStream的子類,操作文件的字節(jié)輸入流,專門用于讀取文件中的數(shù)據(jù)

創(chuàng)建一個(gè)text.txt文件,在文件中輸入"hello"并保存,然后創(chuàng)建一個(gè)讀取文件的類,代碼如下:

package com.Put;import java.io.FileInputStream;public class IO {public static void main(String[] args) throws Exception{//創(chuàng)建一個(gè)文件字節(jié)輸入流來(lái)讀取文件FileInputStream in = new FileInputStream("text.txt");//定義一個(gè)int類型的變量int b = 0;//通過(guò)循環(huán)來(lái)讀取文件,當(dāng)返回值為-1結(jié)束循環(huán)while ((b=in.read())!=-1){System.out.print(b+" ");// System.out.print((char) b+" "); //h e l l o }//關(guān)閉流in.close();}//運(yùn)行結(jié)果:104 101 108 108 111 }

簡(jiǎn)述:

在"text.txt"文件中,字符’h’ ‘e’ ‘l’ ‘l’ 'o’各占一個(gè)字節(jié),因此最終結(jié)果顯示的是文件"text.txt"中的5個(gè)字節(jié)所對(duì)應(yīng)的ASCLL碼值

需要注意的是必須保證文件在相應(yīng)的目錄下存在并且是可讀,否則或拋出java.io.FileNotFoundException異常,即文件找不到異常

FileOutputStream是OutputStream的子類,操作文件的字節(jié)輸出流,用于把數(shù)據(jù)寫入文件

FileOutputStream寫入數(shù)據(jù)時(shí),自動(dòng)創(chuàng)建了文件out.txt,并自定義的字符串寫入到目標(biāo)文件中,代碼如下:

package com.Put;import java.io.FileOutputStream;public class IO {public static void main(String[] args) throws Exception{//創(chuàng)建文件輸出流,并指定文件名稱FileOutputStream out = new FileOutputStream("out.txt");//定義一個(gè)字符串String str = "hello";//將字符串轉(zhuǎn)換為字節(jié)數(shù)組進(jìn)行寫入操作out.write(str.getBytes());//關(guān)閉流out.close();} }

此外,如果通過(guò)FileOutputStream向一個(gè)已經(jīng)存在的文件寫入數(shù)據(jù),那么該文件的數(shù)據(jù)首先會(huì)被清空,再寫入新的數(shù)據(jù);如果希望再已存在的文件內(nèi)容后追加新內(nèi)容,則可以使用FileOutStream的構(gòu)造函數(shù)FileOutputStream(String fileName,boolean append)來(lái)創(chuàng)建文件輸出流對(duì)象,并把a(bǔ)ppend參數(shù)的值設(shè)置為true,代碼如下:

package com.Put;import java.io.FileOutputStream;public class IO {public static void main(String[] args) throws Exception{//創(chuàng)建文件輸出流,并指定文件名稱FileOutputStream out = new FileOutputStream("out.txt",true);//定義一個(gè)字符串String str = "world";//將字符串轉(zhuǎn)換為字節(jié)數(shù)組進(jìn)行寫入操作out.write(str.getBytes());//關(guān)閉流out.close();} }

注意:如果append參數(shù)為false,存在的數(shù)據(jù)依然會(huì)被清空

文件的拷貝
  • 文件的拷貝需要通過(guò)輸入流來(lái)讀取源文件的數(shù)據(jù),并通過(guò)輸出流將數(shù)據(jù)寫入新的文件(I/O流成對(duì)出現(xiàn),即輸入輸出流一起使用)
package com.Put;import java.io.FileInputStream; import java.io.FileOutputStream;public class IO {public static void main(String[] args) throws Exception{//創(chuàng)建文件輸入流對(duì)象讀取指定目錄下的文件FileInputStream in = new FileInputStream("E:\\Idea\\JavaSE\\重新學(xué)習(xí)\\resource\\985.png");//創(chuàng)建文件輸出流對(duì)象將讀取到的文件內(nèi)容寫到指定目錄的文件下FileOutputStream out = new FileOutputStream("E:\\Idea\\JavaSE\\重新學(xué)習(xí)\\target\\211.png");//定義一個(gè)int類型的變量int len = 0;//獲取拷貝文件前的系統(tǒng)時(shí)間long beginTime = System.currentTimeMillis();//循環(huán)將讀取到的文件字節(jié)信息寫入到新文件while ((len=in.read())!=-1){out.write(len);}//獲取拷貝后之后的系統(tǒng)時(shí)間long endTime = System.currentTimeMillis();//輸出拷貝花費(fèi)時(shí)間System.out.println((endTime-beginTime)+"毫秒");in.close();out.close();} }

簡(jiǎn)述:

拷貝過(guò)程通過(guò)while循環(huán)將字節(jié)逐個(gè)進(jìn)行拷貝,每循環(huán)一次,通過(guò)FileInputStream的read()方法讀取一個(gè)字節(jié),并通過(guò)FileOutputStream的write()方法將該字節(jié)寫入指定文件,循環(huán)往復(fù),直到讀取的長(zhǎng)度len為-1,表示讀取到文件的末尾,結(jié)束循環(huán)。文件我使用的是絕對(duì)路徑(相對(duì)絕對(duì)都可)

效果展示:

程序結(jié)束耗費(fèi)地時(shí)間:

字節(jié)流的緩沖區(qū)

通過(guò)流的方法拷貝文件時(shí),為了提高傳輸效率,自定義一個(gè)數(shù)組作為緩沖區(qū),可以一次性讀取多個(gè)字節(jié)的數(shù)據(jù),將數(shù)據(jù)保存在字節(jié)數(shù)組中,然后將字節(jié)數(shù)組的數(shù)據(jù)一次性寫入到新文件中,代碼如下:

package com.Put;import java.io.FileInputStream; import java.io.FileOutputStream;public class IO {public static void main(String[] args) throws Exception{//創(chuàng)建文件輸入流對(duì)象讀取指定目錄下的文件FileInputStream in = new FileInputStream("E:\\Idea\\JavaSE\\重新學(xué)習(xí)\\resource\\985.png");//創(chuàng)建文件輸出流對(duì)象將讀取到的文件內(nèi)容寫到指定目錄的文件下FileOutputStream out = new FileOutputStream("E:\\Idea\\JavaSE\\重新學(xué)習(xí)\\target\\211.png");//定義一個(gè)int類型的變量int len = 0;//定義一個(gè)長(zhǎng)度為1024的字節(jié)數(shù)組byte[] buff = new byte[1024]; //!!!!!!!!!!!!!!!!//獲取拷貝文件前的系統(tǒng)時(shí)間long beginTime = System.currentTimeMillis();//循環(huán)將讀取到的文件字節(jié)信息寫入到新文件 while ((len=in.read(buff))!=-1){ //!!!!!!!!!!!!!!!!!!out.write(buff,0,len);}//獲取拷貝后之后的系統(tǒng)時(shí)間long endTime = System.currentTimeMillis();//輸出拷貝花費(fèi)時(shí)間System.out.println((endTime-beginTime)+"毫秒");in.close();out.close();} }

簡(jiǎn)述:在拷貝過(guò)程中,使用while循環(huán)語(yǔ)句逐漸實(shí)現(xiàn)字節(jié)文件的拷貝,每循環(huán)一次,就從文件讀取若干字節(jié)填充到數(shù)組,并通過(guò)變量len記住讀入數(shù)組的字節(jié)數(shù),然后從數(shù)組的第一個(gè)字節(jié)開始,將len個(gè)字節(jié)寫入到新文件。直到len的值為-1,說(shuō)明已經(jīng)讀到了文件的末尾,循環(huán)結(jié)束,整個(gè)拷貝過(guò)程就結(jié)束了,最終程序會(huì)將整個(gè)文件拷貝到目標(biāo)文件。

運(yùn)行時(shí)間:

字節(jié)緩沖流
  • 兩個(gè)帶緩沖的字節(jié)流,分別是BufferedInputStream和BufferedOutputStream,他們的構(gòu)造方法中分別接收InputStream和OutputStream類型的參數(shù)作為對(duì)象,在讀取時(shí)提供緩沖區(qū)功能。

應(yīng)用程序、緩沖流和底層字節(jié)流的關(guān)系,如圖:

從圖可以看出,應(yīng)用程序時(shí)通過(guò)緩沖流來(lái)完成數(shù)據(jù)讀寫的,而緩沖流又是通過(guò)底層字節(jié)流與設(shè)備進(jìn)行關(guān)聯(lián)的。

BufferedInputStream和BufferedOutputStream這兩個(gè)緩沖流的用法如下:

package com.Put;import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream;public class IO {public static void main(String[] args) throws Exception{//創(chuàng)建輸入輸出流字節(jié)緩沖流對(duì)象BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\Idea\\JavaSE\\重新學(xué)習(xí)\\resource\\985.png"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\Idea\\JavaSE\\重新學(xué)習(xí)\\target\\211.png"));//定義一個(gè)int類型的變量int len = 0;//獲取拷貝文件前的系統(tǒng)時(shí)間long beginTime = System.currentTimeMillis();//通過(guò)循環(huán)讀取輸入字節(jié)緩沖流中的數(shù)據(jù),并通過(guò)輸出字節(jié)緩沖流寫入到新文件while ((bis.read())!=-1) {bos.write(len);}//獲取拷貝后之后的系統(tǒng)時(shí)間long endTime = System.currentTimeMillis();//輸出拷貝花費(fèi)時(shí)間System.out.println((endTime-beginTime)+"毫秒");//關(guān)閉流bis.close();bos.close();} }

運(yùn)行結(jié)果圖:

簡(jiǎn)述:

創(chuàng)建了BufferedInputStream和BufferedOutputStream這兩個(gè)緩沖流對(duì)象,這兩個(gè)流內(nèi)部都定義了一個(gè)大小為8192的字節(jié)數(shù)組,當(dāng)定義read()和write()方法讀取數(shù)據(jù)時(shí),首先將讀寫的數(shù)據(jù)存入到定義的好的字節(jié)數(shù)組,然后將字節(jié)數(shù)組一次性讀寫到文件中。這種方式與字節(jié)流的緩沖區(qū)相似,都對(duì)數(shù)據(jù)進(jìn)行了緩沖,提高數(shù)據(jù)讀取的效率。

總結(jié)

以上是生活随笔為你收集整理的字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费在线小视频 | 天天干天天舔 | 色女仆影院 | av在线影音| 三级在线网站 | 免费在线视频一区 | 王者后宫yin肉h文催眠 | 激情五月色综合国产精品 | 91精品人妻一区二区三区 | 天天干天天做天天操 | 日韩三级视频在线观看 | www国产com | 成人免费黄色大片v266 | 色多多导航 | 青青草原免费观看 | 久久高清毛片 | 一级片在线免费播放 | 亚洲高清毛片一区二区 | 亚洲区欧美 | 91久久精品www人人做人人爽 | 亚洲精品在线免费播放 | 亚洲av久久久噜噜噜熟女软件 | av综合色 | 99精品视频一区二区三区 | 久久综合久久综合久久综合 | 夜夜嗨av一区二区三区网页 | 操碰人人 | 大地av | 黄网在线看 | 国产午夜伦鲁鲁 | 久久精品视频6 | 校霸被c到爽夹震蛋上课高潮 | 夜夜添无码一区二区三区 | 99成人免费视频 | 欧美网| 欧美丰满一区二区免费视频 | 丰满岳妇乱一区二区三区 | 中文字幕日本一区二区 | 国产91免费看 | 国产精品成人久久久 | 欧美成人综合色 | 精品无码人妻一区二区三区品 | 99国产精品久久久久久久 | 国语对白精彩对话 | 国产精品一区二区在线免费观看 | 久久久久久久久久久久久久久久久久久 | 亚洲精品www. | 欧美精品激情 | 成人欧美一区二区三区黑人免费 | 日本一区二区三区四区视频 | 国产高清av在线 | 夫妻毛片 | 亚洲高清中文字幕 | www.五月天婷婷.com | 夜夜嗨av一区二区三区四区 | 91国偷自产一区二区三区老熟女 | 日韩精品一区二区三区电影 | 亚洲精品人妻无码 | 精品99久久久 | 国内精品在线播放 | 性欧美欧美巨大69 | 国产精品黄在线观看 | 久久中文字幕网 | yjizz国产 | 97午夜 | 懂色aⅴ一区二区三区免费 国产精品99在线观看 | 亚洲三级久久 | 国产精品精东影业 | 国产婷婷在线视频 | 久久影视中文字幕 | 超碰97人| 久久艳片www.17c.com | 亚洲 在线 | 91网站免费观看 | 岛国精品资源网站 | 亚洲在线观看视频 | 大咪咪av| 性欧美大战久久久久久久 | 高潮毛片7777777毛片 | mm131美女大尺度私密照尤果 | 艳情五月| 99中文字幕 | 国产二区三区视频 | 国产麻豆91视频 | 欧美日韩aa | 亚洲香蕉 | 熟妇高潮一区二区三区 | 青青视频免费看 | 成人自拍视频在线观看 | 12av毛片| 朝桐光在线播放 | 亚洲欧美第一页 | 91黄色免费看 | 国产一页 | 人人澡澡人人 | 1000部做爰免费视频 | 日日摸日日添日日碰9学生露脸 | 欧美一区二区三区在线看 | 国产高潮流白浆喷水视频 |