課程
/后端開發(fā)
/Java
/文件傳輸基礎(chǔ)——Java IO流
課上簡單內(nèi)容指針一直從0開始不是會(huì)變成死循環(huán)?
2016-04-20
源自:文件傳輸基礎(chǔ)——Java IO流 4-2
正在回答
int bytes = in.read(buf,0,buf.length);這個(gè)返回值,是你讀到的實(shí)際個(gè)數(shù),例如:你buf new的事1024,但是你文件中只要100個(gè),bytes就= 100;如果文件超過1024字節(jié),一次讀會(huì)返回1024,第二次讀的時(shí)候,指針從1024再開始讀,每次1024個(gè)字節(jié)讀,知道讀完,所以bytes 返回值,要么是1024,要么是最后一次讀到數(shù)據(jù),但是不足1024,返回實(shí)際值,再讀一次 就是EOF(結(jié)尾),返回-1
刃殤 提問者
海與千巷
不足1024的話它循環(huán)讀取,郁悶? 你幫我看下
package?icetest; import?java.io.FileInputStream; import?java.io.FileNotFoundException; import?java.io.IOException; import?java.util.Scanner; import?java.util.concurrent.CountDownLatch; public?class?FilesInputStream方法讀文件練習(xí)?{ ????//F:\KwDownload\Lyric\洛天依-生.lrc ???? ????public?static?void?printToHex(String?fileName)?throws?IOException?{ ????????int?num?=?0; ????????int?count?=?0; ????????byte[]?buf?=?new?byte[8*1024]; ???????? ????????FileInputStream?file; ????????try?{ ????????????file?=?new?FileInputStream(fileName); ????????????while?((num?=?file.read(buf))?!=?-1)?{ ????????????????for?(int?i=0;?i<num;?++i)?{ ????????????????????if?(++count%5?==?0) ????????????????????????System.out.println();???? ????????????????????String?st?=?new?String(buf); ???????????????????? ????????????????????System.out.print(st?+?"??"); ????????????????} ????????????} ????????}?catch?(FileNotFoundException?e)?{ ????????????//?TODO?Auto-generated?catch?block ????????????System.out.println("文件不存在!"); ????????} ???????? ????} ???? ????/** ?????*?@param?args ?????*?@throws?IOException? ?????*?@throws?FileNotFoundException? ?????*/ ????public?static?void?main(String[]?args)?throws?IOException?{ ????????//?TODO?Auto-generated?method?stub ????????Scanner?in?=?new?Scanner(System.in); ???????? ????????System.out.println("請輸入要讀取的文件:"); ????????String?fileName?=?in.next(); ???????? ????????printToHex(fileName); ????} }
我讀一個(gè)歌詞,下邊是結(jié)果
[00:03.72]作詞 : 雨貍[00:05.84]作曲 : DELA[00:07.60]如果某一個(gè)時(shí)間 我能愛上一片樹葉[00:13.16]那么某一個(gè)未來 我也能愛上某個(gè)人[00:18.60]他或讀著海子的詩篇 或者遙遠(yuǎn) 遠(yuǎn)在天邊[00:23.84]在某一個(gè)劇情轉(zhuǎn)折點(diǎn) 帶我前往明天[00:29.17]我曾在悲傷中流連 無法忘卻[00:34.45]那一天現(xiàn)實(shí)與夢想無情地被撕裂[01:22.45]色彩于我不過無物 晝與夜失去了區(qū)別[01:27.81]卻看得見塵霾顛簸 行走著空心的枯骨[01:33.25]終日畏懼陌生的視線 熟悉畫面 活的一切[01:38.55]恨的情感最終也干癟 在朝霞口中奄奄[01:43.62]誰看見我的黑夜 有無數(shù)的禿鷲在盤旋[01:53.22]荒涼的墳場地 予我安眠[01:59.18]無法理解 生者們慣用的語言[02:05.33]我曾在童話中哭泣 聲嘶力竭[02:10.54]那一天謊言摧毀了 善惡的邊界[02:15.84]對暴虐跪獻(xiàn)上尊嚴(yán) 乞求諒解[02:21.12]只渴望靈魂能從這空白中被赦免[02:47.97]如果我能單純愛上一片樹葉[02:53.13]是否就能做到再次愛上這個(gè)世界[03:00.43]。。。。。。。。
。。。。。。。。
循環(huán)好幾遍
int bytes = in.read(buf,0,buf.length) 【方法原貌:read(byte[] b, int off, int len)】?
題主可能不小心把off=0當(dāng)作是讀取的文件in的偏移量了,其實(shí)仔細(xì)看下off=0是字節(jié)數(shù)組buf的偏移量,他表示的是字節(jié)數(shù)組從buf[0]開始存儲(chǔ)in讀出來的字節(jié)
所以當(dāng)文件大于指定的字節(jié)數(shù)組大?。ㄗx取的文件比定義的buf空間還大)的時(shí)候,他會(huì)循環(huán)重新從buf[0]開始重頭存儲(chǔ)in讀出來的字節(jié)(所以視屏中每read完一次,就處理讀取完的數(shù)據(jù)buf),直到返回EOF(結(jié)尾)-1為止
舉報(bào)
為您介紹IO流的使用,以及對象的序列化和反序列化的內(nèi)容
2 回答使用while循環(huán),能夠讀完大于字節(jié)數(shù)組長度的文件嗎?如何實(shí)現(xiàn)的?
2 回答關(guān)于字節(jié)數(shù)組讀取文件
1 回答我用printByByteArray方法,字節(jié)數(shù)組不足夠大怎么也是讀取整個(gè)文件?
4 回答老師這里創(chuàng)建字節(jié)數(shù)組循環(huán)讀取大文件是不是有bug呢?
4 回答單字節(jié)讀取時(shí)Integer.toHexString(b) 批量讀取時(shí)Integer.toHexString(buf[i]&0xff)
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2016-04-20
int bytes = in.read(buf,0,buf.length);這個(gè)返回值,是你讀到的實(shí)際個(gè)數(shù),例如:你buf new的事1024,但是你文件中只要100個(gè),bytes就= 100;如果文件超過1024字節(jié),一次讀會(huì)返回1024,第二次讀的時(shí)候,指針從1024再開始讀,每次1024個(gè)字節(jié)讀,知道讀完,所以bytes 返回值,要么是1024,要么是最后一次讀到數(shù)據(jù),但是不足1024,返回實(shí)際值,再讀一次 就是EOF(結(jié)尾),返回-1
2016-07-03
不足1024的話它循環(huán)讀取,郁悶? 你幫我看下
我讀一個(gè)歌詞,下邊是結(jié)果
[00:03.72]作詞 : 雨貍
[00:05.84]作曲 : DELA
[00:07.60]如果某一個(gè)時(shí)間 我能愛上一片樹葉
[00:13.16]那么某一個(gè)未來 我也能愛上某個(gè)人
[00:18.60]他或讀著海子的詩篇 或者遙遠(yuǎn) 遠(yuǎn)在天邊
[00:23.84]在某一個(gè)劇情轉(zhuǎn)折點(diǎn) 帶我前往明天
[00:29.17]我曾在悲傷中流連 無法忘卻
[00:34.45]那一天現(xiàn)實(shí)與夢想無情地被撕裂
[01:22.45]色彩于我不過無物 晝與夜失去了區(qū)別
[01:27.81]卻看得見塵霾顛簸 行走著空心的枯骨
[01:33.25]終日畏懼陌生的視線 熟悉畫面 活的一切
[01:38.55]恨的情感最終也干癟 在朝霞口中奄奄
[01:43.62]誰看見我的黑夜 有無數(shù)的禿鷲在盤旋
[01:53.22]荒涼的墳場地 予我安眠
[01:59.18]無法理解 生者們慣用的語言
[02:05.33]我曾在童話中哭泣 聲嘶力竭
[02:10.54]那一天謊言摧毀了 善惡的邊界
[02:15.84]對暴虐跪獻(xiàn)上尊嚴(yán) 乞求諒解
[02:21.12]只渴望靈魂能從這空白中被赦免
[02:47.97]如果我能單純愛上一片樹葉
[02:53.13]是否就能做到再次愛上這個(gè)世界
[03:00.43]
。。。。。。。。
。。。。。。。。
。。。。。。。。
循環(huán)好幾遍
2016-04-21
int bytes = in.read(buf,0,buf.length) 【方法原貌:read(byte[] b, int off, int len)】?
題主可能不小心把off=0當(dāng)作是讀取的文件in的偏移量了,其實(shí)仔細(xì)看下off=0是字節(jié)數(shù)組buf的偏移量,他表示的是字節(jié)數(shù)組從buf[0]開始存儲(chǔ)in讀出來的字節(jié)
所以當(dāng)文件大于指定的字節(jié)數(shù)組大?。ㄗx取的文件比定義的buf空間還大)的時(shí)候,他會(huì)循環(huán)重新從buf[0]開始重頭存儲(chǔ)in讀出來的字節(jié)(所以視屏中每read完一次,就處理讀取完的數(shù)據(jù)buf),直到返回EOF(結(jié)尾)-1為止