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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

fileinputstream_Java I/O 流之 FileInputStream

發(fā)布時間:2024/7/5 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fileinputstream_Java I/O 流之 FileInputStream 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、FileInputStream 簡介

1、概念

FileInputStream 是 Java 語言中抽象類 InputStream 用來具體實現(xiàn)類的創(chuàng)建對象。FileInputStream 流被稱為文件字節(jié)輸入流,意思指對文件數(shù)據(jù)以字節(jié)的形式進行讀取操作如讀取圖片視頻等。

2、構(gòu)造方法

1)通過打開與 File 類對象代表的實際文件的鏈接來創(chuàng)建 FileInputStream 流對象

public FileInputStream(File file) throws FileNotFoundException {String name = (file != null ? file.getPath() : null);SecurityManager security = System.getSecurityManager();if (security != null) {security.checkRead(name);}if (name == null) {throw new NullPointerException();}if (file.isInvalid()) {throw new FileNotFoundException("Invalid file path");} // 一系列合法性的判斷fd = new FileDescriptor(); // 以下均是對成員變量的構(gòu)造fd.attach(this);path = name;open(name); // 調(diào)用native方法打開文件 }若 File 類對象的所代表的文件不存在、不是文件是目錄、或者其他原因不能打開的話,則會拋出 FileNotFoundException 異常。

2)通過指定的字符串參數(shù)來創(chuàng)建File類對象,而后再與 File 對象所代表的實際路徑建立鏈接創(chuàng)建 FileInputStream 流對象

public FileInputStream(String name) throws FileNotFoundException {this(name != null ? new File(name) : null);}通過查看源碼,發(fā)現(xiàn)該構(gòu)造方法等于是在第一個構(gòu)造方法的基礎(chǔ)上進行延伸的,因此規(guī)則也和第一個構(gòu)造方法一致:

3)通過 fdObj 文件描述符來作為參數(shù),文件描述符是指與計算機系統(tǒng)中的文件的連接,前面兩個方法的源碼中最后都是利用文件描述符來建立連接的(了解)

public FileInputStream(FileDescriptor fdObj) {SecurityManager security = System.getSecurityManager();if (fdObj == null) {throw new NullPointerException();}if (security != null) {security.checkRead(fdObj);}fd = fdObj;path = null;fd.attach(this); }

二、FileInputStream 常用方法

1、read() 從輸入流中讀取一個字節(jié)返回int型變量,若到達文件末尾,則返回-1

public int read() throws IOException源碼:public class FileStream {public static void main(String[] args) {//建立文件對象File file = new File("D:test1.txt");try {//建立鏈接FileInputStream fileInputStream = new FileInputStream(file);int n = 0;StringBuffer sBuffer=new StringBuffer();while (n != -1){ //當(dāng)n不等于-1,則代表未到末尾n = fileInputStream.read();//讀取文件的一個字節(jié)(8個二進制位),并將其由二進制轉(zhuǎn)成十進制的整數(shù)返回char by = (char) n; //轉(zhuǎn)成字符sBuffer.append(by);}System.out.println(sBuffer.toString());} catch (FileNotFoundException e) {System.out.println("文件不存在或者文件不可讀或者文件是目錄");} catch (IOException e) {System.out.println("讀取過程存在異常");} } }最后輸出內(nèi)容和 1.txt 內(nèi)容一致是:123總結(jié):從(來源)輸入流中(讀取的內(nèi)容)讀取數(shù)據(jù)的下一個字節(jié)到(去處)java程序內(nèi)部中返回值為0到255的int類型的值,返回值為字符的ACSII值(如a就返回97,n就返回110).如果沒有可用的字節(jié),因為已經(jīng)到達流的末尾, -1返回的值運行一次只讀一個字節(jié),所以經(jīng)常與while((len = inputstream.read()) != -1)一起使用

2、read(byte[] b) 從輸入流中讀取 b.length 個字節(jié)到字節(jié)數(shù)組中,返回讀入緩沖區(qū)的總字節(jié)數(shù),若到達文件末尾,則返回-1

public int read(byte[] b) throws IOException源碼:public int read(byte b[]) throws IOException {return readBytes(b, 0, b.length); }

查看此方法源碼,發(fā)現(xiàn)其本質(zhì)是調(diào)用的其它方法 readBytes(b, 0, b.length);

總結(jié):從(來源)輸入流中(讀取內(nèi)容)讀取的一定數(shù)量字節(jié)數(shù),并將它們存儲到(去處)緩沖區(qū)數(shù)組b中返回值為實際讀取的字節(jié)數(shù)運行一次讀取一定的數(shù)量的字節(jié)數(shù).java會盡可能的讀取b個字節(jié),但也有可能讀取少于b的字節(jié)數(shù).至少讀取一個字節(jié)第一個字節(jié)存儲讀入元素b[0],下一個b[1],等等。讀取的字節(jié)數(shù)是最多等于b的長度。如果沒有可用的字節(jié),因為已經(jīng)到達流的末尾, -1返回的值 如果b.length==0,則返回0

3、read(byte[] b,int off,int len) 從輸入流中讀取最多l(xiāng)en個字節(jié)到字節(jié)數(shù)組中(從數(shù)組的off位置開始存儲字節(jié)),當(dāng)len為0時則返回0,如果len不為零,則該方法將阻塞,直到某些輸入可用為止

public int read(byte[] b,int off,int len) throws IOException源碼:public int read(byte b[], int off, int len) throws IOException {if (b == null) {throw new NullPointerException();} else if (off < 0 || len < 0 || len > b.length - off) {throw new IndexOutOfBoundsException();} else if (len == 0) {return 0;}int c = read();if (c == -1) {return -1;}b[off] = (byte)c;int i = 1;try {for (; i < len ; i++) {c = read();if (c == -1) {break;}b[off + i] = (byte)c;}} catch (IOException ee) {}return i;}總結(jié):讀取 len字節(jié)的數(shù)據(jù)從輸入流到一個字節(jié)數(shù)組。試圖讀取多達 len字節(jié),但可能讀取到少于len字節(jié)。返回實際讀取的字節(jié)數(shù)為整數(shù)。 第一個字節(jié)存儲讀入元素b[off],下一個b[off+1],等等。讀取的字節(jié)數(shù)是最多等于len。k被讀取的字節(jié)數(shù),這些字節(jié)將存儲在元素通過b[off+k-1]b[off],離開元素通過b[off+len-1]b[off+k]未受影響。

4、close() 關(guān)閉此輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源---即釋放與實際文件的連接

public void close() throws IOException

三、FileInputStream 常用 API 總結(jié)

1、為什么 read() 無參方法讀取一個字節(jié),返回的是一個 int 類型,而不是一個byte類型?

因為字節(jié)輸入流可以操作任意類型的文件,比如圖片音頻等,這些文件底層都是以二進制形式的存儲的,如果每次讀取都返回 byte,有可能在讀到中間的時候遇到 111111111(文件的底層按補碼來存儲的):

那么這 11111111 是 byte 類型的 -1,我們的程序是遇到 -1 就會停止不讀了,后面的數(shù)據(jù)就讀不到了,所以在讀取的時候用 int 類型接收,如果 11111111 會在其前面補上 24 個 0 湊足 4 個字節(jié),那么 byte 類型的 -1 就變成 int 類型的 255 了,這樣可以保證整個數(shù)據(jù)讀完,而結(jié)束標記的 -1 就是 int 類型。

2、三種 read 方法效率比較

查看三種 read 方法源碼,其本質(zhì)都是利用 for 循環(huán)對內(nèi)容進行單字節(jié)的讀取,但從代碼形式看,使用 read(byte[] b) 較為直觀和簡便,因此項目中可以此方法為主進行數(shù)據(jù)讀取。

知乎視頻?www.zhihu.com

希望可以幫到大家~

總結(jié)

以上是生活随笔為你收集整理的fileinputstream_Java I/O 流之 FileInputStream的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 黄网在线免费看 | 好吊妞这里只有精品 | 国产高潮视频在线观看 | 成人午夜影院 | 色中文网 | 蜜桃91丨九色丨蝌蚪91桃色 | www黄在线观看 | 国产美女在线看 | 欧美成人精品一区二区三区在线看 | 九九视频在线 | 午夜av中文字幕 | 国产碰碰| 久久影院午夜 | 91精品视频免费观看 | 久久亚洲AV成人无码一二三 | 国产成人在线视频免费观看 | 日日碰 | 亚洲av乱码一区二区 | 亚洲男人的天堂在线观看 | jizz欧美性23 | 免费在线观看不卡av | 亚洲黄色在线播放 | av夜夜操 | 色综合久久久久久 | 日本免费一区视频 | 福利电影一区 | 亚洲第一色区 | 97在线国产 | 91在线无精精品一区二区 | 不卡av在线免费观看 | 欧美区一区二 | 欧美精品18videosex性欧美 | 美国一级特黄 | 亚洲色图另类图片 | 国产情侣一区 | 五月av | 深夜免费福利 | 亚洲无码国产精品 | 国产视频一区二区三区在线播放 | 午夜999| 欧美aaaaaa| 婷婷调教口舌奴ⅴk | 麻豆性生活 | 极品少妇一区 | 青青视频在线免费观看 | 国产精品网站免费 | 国产一级久久久久毛片精品 | 福利一区福利二区 | 插入综合网 | 欧美无砖区 | 国产精品无码电影在线观看 | 色吊丝av中文字幕 | 日本污视频在线观看 | 日韩美女视频网站 | 超碰在线免费观看97 | 日韩亚洲欧美一区二区 | 麻豆高清免费国产一区 | 99久久综合国产精品二区 | 日韩在线视频网站 | 女人扒开屁股让男人捅 | 日韩免费影院 | 国产精品无码在线 | 五月天伊人网 | 精品人妻久久久久久888不卡 | 在线观看日本网站 | 97中文字幕在线观看 | 白丝开裆喷水 | 午夜影院a | 亚洲在线视频观看 | 国产精品无码一本二本三本色 | 美女被男人桶出白浆喷水 | 女人扒开屁股让我添 | 亚洲图片欧美视频 | 伊人久久精品一区二区三区 | 日韩乱码视频 | www.九色.com| 中文字幕无码精品亚洲资源网久久 | 日韩六区| 激情国产 | 亚洲精品丝袜 | 亚洲乱码一区二区三区 | 国产精品一区二区毛片 | 亚洲精品久久久久久宅男 | 久久久久久久久久福利 | 97夜色 | 久久一区 | 久久无码高潮喷水 | 奇米777视频 | 无码精品人妻一区二区三区漫画 | 2025国产精品视频 | 欧美性猛交xxx乱大交3蜜桃 | 久久成人在线视频 | 日韩精品中文字幕在线 | 在线只有精品 | 粉嫩精品久久99综合一区 | 殴美黄色大片 | 成人在线视频免费观看 | 亚洲国产精品自拍 | 日韩欧美精品在线观看 |