亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

文件上字節流讀取如果buf不夠循環條件應該怎么寫


課上簡單內容指針一直從0開始不是會變成死循環?

正在回答

3 回答

int bytes = in.read(buf,0,buf.length);這個返回值,是你讀到的實際個數,例如:你buf new的事1024,但是你文件中只要100個,bytes就= 100;如果文件超過1024字節,一次讀會返回1024,第二次讀的時候,指針從1024再開始讀,每次1024個字節讀,知道讀完,所以bytes 返回值,要么是1024,要么是最后一次讀到數據,但是不足1024,返回實際值,再讀一次 就是EOF(結尾),返回-1

3 回復 有任何疑惑可以回復我~
#1

刃殤 提問者

非常感謝!
2016-04-23 回復 有任何疑惑可以回復我~
#2

海與千巷

感謝,解決了我的疑惑
2016-09-06 回復 有任何疑惑可以回復我~

不足1024的話它循環讀取,郁悶? 你幫我看下

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方法讀文件練習?{

????//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);
????}

}

我讀一個歌詞,下邊是結果

[00:03.72]作詞 : 雨貍

[00:05.84]作曲 : DELA

[00:07.60]如果某一個時間 我能愛上一片樹葉

[00:13.16]那么某一個未來 我也能愛上某個人

[00:18.60]他或讀著海子的詩篇 或者遙遠 遠在天邊

[00:23.84]在某一個劇情轉折點 帶我前往明天

[00:29.17]我曾在悲傷中流連 無法忘卻

[00:34.45]那一天現實與夢想無情地被撕裂

[01:22.45]色彩于我不過無物 晝與夜失去了區別

[01:27.81]卻看得見塵霾顛簸 行走著空心的枯骨

[01:33.25]終日畏懼陌生的視線 熟悉畫面 活的一切

[01:38.55]恨的情感最終也干癟 在朝霞口中奄奄

[01:43.62]誰看見我的黑夜 有無數的禿鷲在盤旋

[01:53.22]荒涼的墳場地 予我安眠

[01:59.18]無法理解 生者們慣用的語言

[02:05.33]我曾在童話中哭泣 聲嘶力竭

[02:10.54]那一天謊言摧毀了 善惡的邊界

[02:15.84]對暴虐跪獻上尊嚴 乞求諒解

[02:21.12]只渴望靈魂能從這空白中被赦免

[02:47.97]如果我能單純愛上一片樹葉

[02:53.13]是否就能做到再次愛上這個世界

[03:00.43]
。。。。。。。。

。。。。。。。。

。。。。。。。。

循環好幾遍

0 回復 有任何疑惑可以回復我~

int bytes = in.read(buf,0,buf.length) 【方法原貌:read(byte[] b, int off, int len)】?

題主可能不小心把off=0當作是讀取的文件in的偏移量了,其實仔細看下off=0是字節數組buf的偏移量,他表示的是字節數組從buf[0]開始存儲in讀出來的字節

所以當文件大于指定的字節數組大?。ㄗx取的文件比定義的buf空間還大)的時候,他會循環重新從buf[0]開始重頭存儲in讀出來的字節(所以視屏中每read完一次,就處理讀取完的數據buf),直到返回EOF(結尾)-1為止

1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

文件上字節流讀取如果buf不夠循環條件應該怎么寫

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號