FileInputStream fis = new FileInputStream("E:\\adadad\\b\\aa.txt");
while ((len = fis.read()) != -1 { System.out.print((char)len); }
fis.close();
這個地方的(len = fis.read()) != -1,如果直接改為fis.read()!=-1,然后直接列印fis.read()為什么結果不一樣呢?這個地方代碼執行是怎樣的呢?
小小萌新求助大佬!!!
uj5u.com熱心網友回復:
這個當然不一樣了,不知道你有沒有用過迭代器Iterator,意思差不多。你這個的話,就簡單理解成fis.read()就是讀取一行的內容,每操作一次,它內部就會指向下一行。
你改完的寫法,就變成了讀取第一行,列印第二行了。
之前的寫法就是,讀取一行,列印一行。
uj5u.com熱心網友回復:
Iterator用過,但是還不是很明白。那個aa.txt里面內容是abc,改前列印的是abc,是三個,但改后就是a和一個-1代表的字符,所以不是很懂????
uj5u.com熱心網友回復:
哦哦,我又想了下,明白了明白了,謝謝大佬!!!
uj5u.com熱心網友回復:
嗯嗯,我剛才說得不對,不好意思。
我以為是字符流,一行一行讀的。
這個是位元組流,read()方法是每次讀取一個位元組的內容,回傳的是一個int型別,然后可以強壯成char,所以可以輸入abc,其實也是輸出了3次,每次是a(97),b(98),c(99),括號里面的是這個字符對應的位元組int值。
然后你改了一下代碼,應該是這樣的吧:
while ((fis.read()) != -1)
{
System.out.println(fis.read());
}
或者是:
while ((fis.read()) != -1)
{
System.out.println((char)fis.read());
}
你要記得,每read()一次,就讀取一個位元組,檔案里面有3個位元組;然后里面有一個指標,每次執行一次,就會向后移動,和迭代器一樣。
按照這種寫法,讀取一個位元組以后,沒有存盤,僅判斷了一下,然后又去讀取,再輸出,這次就是第二個位元組。
然后下次判斷是第三個,輸出就是第4個了。這樣就理解了吧。
話說按照我上面的改法,輸出的應該是b和-1吧,不知道你的a怎么來的。
不過沒有關系,這個現在可以理解了吧。
uj5u.com熱心網友回復:
嗯嗯,是的( ﹡?o?﹡ ),感謝感謝uj5u.com熱心網友回復:
這個當然不一樣了,不知道你有沒有用過迭代器Iterator,意思差不多。
你這個的話,就簡單理解成fis.read()就是讀取一行的內容,每操作一次,它內部就會指向下一行。
你改完的寫法,就變成了讀取第一行,列印第二行了。
之前的寫法就是,讀取一行,列印一行。
Iterator用過,但是還不是很明白。那個aa.txt里面內容是abc,改前列印的是abc,是三個,但改后就是a和一個-1代表的字符,所以不是很懂??
嗯嗯,我剛才說得不對,不好意思。
我以為是字符流,一行一行讀的。
這個是位元組流,read()方法是每次讀取一個位元組的內容,回傳的是一個int型別,然后可以強壯成char,所以可以輸入abc,其實也是輸出了3次,每次是a(97),b(98),c(99),括號里面的是這個字符對應的位元組int值。
然后你改了一下代碼,應該是這樣的吧:
while ((fis.read()) != -1)
{
System.out.println(fis.read());
}
或者是:
while ((fis.read()) != -1)
{
System.out.println((char)fis.read());
}
你要記得,每read()一次,就讀取一個位元組,檔案里面有3個位元組;然后里面有一個指標,每次執行一次,就會向后移動,和迭代器一樣。
按照這種寫法,讀取一個位元組以后,沒有存盤,僅判斷了一下,然后又去讀取,再輸出,這次就是第二個位元組。
然后下次判斷是第三個,輸出就是第4個了。這樣就理解了吧。
話說按照我上面的改法,輸出的應該是b和-1吧,不知道你的a怎么來的。
不過沒有關系,這個現在可以理解了吧。
嗯嗯,是的( ﹡?o?﹡ ),感謝感謝
uj5u.com熱心網友回復:
嗯嗯,是的( ﹡?o?﹡ ),感謝感謝
記得互粉



順便結帖
uj5u.com熱心網友回復:
嗯嗯,是的( ﹡?o?﹡ ),感謝感謝
記得互粉順便結帖
哇,既然是山大的大佬,已關注!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/138101.html
標籤:非技術區
上一篇:學習第40天
下一篇:eclipse安裝配置出現問題
