java中的FileInputStream三種read()函數(shù)用法
FileInputStream流的三種read()函數(shù)對(duì)比
首先我們先創(chuàng)建FileIputStream流對(duì)文件進(jìn)行讀取
public static void main(String[] args) throws IOException {
//創(chuàng)建File對(duì)象,保存文件夾路徑iu
File fin_floder = new File("C:\\test.txt");
//創(chuàng)建從文件讀取數(shù)據(jù)的FileInputStream流
FileInputStream fin = new FileInputStream(fin_floder);
1. int read( )函數(shù)
該函數(shù)的返回值為int數(shù)值,表示讀取的字符對(duì)應(yīng)的ascii碼,當(dāng)返回為-1表示讀取到文件末尾;
//順序讀取到文件末尾
int temp = 0;
while( (temp = fin.read()) != -1) {
System.out.print(temp+" "); //打印read()返回值
System.out.printf("%c",temp); //打印ascii碼對(duì)應(yīng)的字符
System.out.println(); //換行
}
讀取 hello,world 文本文檔的結(jié)果:

2. read( byte [ ] )
返回讀入緩沖區(qū)的字節(jié)總數(shù),到末尾返回-1
int size = fin.available(); //返回文件的總字節(jié)數(shù) byte[] b = new byte[size]; //生成緩存用于存放讀入的字節(jié) System.out.println(fin.read(b)); String str = new String(b); //將字節(jié)數(shù)組轉(zhuǎn)化為字符串 System.out.println(str);
讀取 hello,world 文本文檔的結(jié)果:數(shù)值 11

3. read(byte[ ] ,int off ,int len)
off表示目標(biāo)數(shù)組b中的起始偏移量,也就是從第幾個(gè)下標(biāo)開(kāi)始寫(xiě)入數(shù)組,len表示寫(xiě)入數(shù)組的長(zhǎng)度;
int size = fin.available(); byte[] b = new byte[size]; fin.read(b,2,5); //從數(shù)組的的第三個(gè)元素開(kāi)始寫(xiě)入,寫(xiě)五個(gè)字節(jié)長(zhǎng)度 String str = new String(b); //字節(jié)數(shù)組轉(zhuǎn)化為字符串 System.out.println(str);
輸出結(jié)果為:

FileInputStream中的read()方法
首先這是我自己寫(xiě)代碼的時(shí)候遇到的一個(gè)問(wèn)題,我思來(lái)想去,終于想通透了,所以想分享給大家,當(dāng)然這也是一個(gè)非常簡(jiǎn)單的問(wèn)題。
public class IO_InputStream
public static void main(String[] args){//需要導(dǎo)包的,圖方便我就不寫(xiě)了
//1.new一個(gè)FileInputStream對(duì)象
FileInputStream fis = new FileInputStream("chifan.next)) ;
//例如這個(gè)文本里面我放了1234567共7個(gè)字符,下面開(kāi)始讀取文件
while(fis.read() != -1){
System.out.print( char)fis.read() ); //將read()方法調(diào)用后返回值為int類型強(qiáng)制轉(zhuǎn)換為字符,以便打印
}
//但是打印結(jié)果就是:246,隔一個(gè)打印一個(gè),我感到疑惑
//后來(lái)我左思右想發(fā)現(xiàn)我在while的執(zhí)行語(yǔ)句塊里面的打印方法又調(diào)用了一次read()方法,導(dǎo)致打印的其實(shí)是每次讀取兩個(gè)字符后,只會(huì)打印每?jī)蓚€(gè)的最后一個(gè)字符,如果我們?cè)?23456后面再一個(gè)7,那么最后打印的就是一個(gè)?如何解決呢?就是我們不要在執(zhí)行語(yǔ)句塊里面出現(xiàn)read()方法
int len;
while(len=fis.read() != -1){
System.out.print( char)len);
}
//這樣結(jié)果就一致了
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?零基礎(chǔ)入門(mén)WebFlux框架體系
Spring5發(fā)布有兩年了,隨Spring5一起發(fā)布了一個(gè)和Spring?WebMvc同級(jí)的Spring?WebFlux。這是一個(gè)支持反應(yīng)式編程模型的新框架體系。反應(yīng)式模型區(qū)別于傳統(tǒng)的MVC最大的不同是異步的、事件驅(qū)動(dòng)的、非阻塞的,這使得應(yīng)用程序的并發(fā)性能會(huì)大大提高,單位時(shí)間能夠處理更多的請(qǐng)求2022-07-07
Java日期時(shí)間字符串和毫秒相互轉(zhuǎn)換的方法
這篇文章主要為大家詳細(xì)介紹了Java日期時(shí)間字符串和毫秒相互轉(zhuǎn)換的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Java數(shù)組集合的深度復(fù)制代碼實(shí)例
這篇文章主要介紹了Java數(shù)組集合的深度復(fù)制代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
springboot Mongodb的集成與使用實(shí)例詳解
這篇文章主要介紹了springboot Mongodb的集成與使用實(shí)例詳解,需要的朋友可以參考下2018-04-04
Java class文件格式之訪問(wèn)標(biāo)志信息_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
access_flags 描述的是當(dāng)前類(或者接口)的訪問(wèn)修飾符, 如public, private等, 此外, 這里面還存在一個(gè)標(biāo)志位, 標(biāo)志當(dāng)前的額這個(gè)class描述的是類, 還是接口2017-06-06
Spring ApplicationListener監(jiān)聽(tīng)器用法詳解
這篇文章主要介紹了Spring ApplicationListener監(jiān)聽(tīng)器用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11

