[問題] BufferedReader.read回傳

看板java作者 (寂寞的等待)時間12年前 (2013/05/04 12:09), 編輯推噓3(305)
留言8則, 6人參與, 最新討論串1/1
因為很少用到IO這個部分,觀念有點不太清楚 小弟嘗試寫了以下的Code 大致如下 BufferedReader theReader = new BufferedReader(new InputStreamReader(System.in)); char readTemp[] = new char[10]; j = theReader.read(readTemp); 我看JAVA API上說的是 The number of characters read, or -1 if the end of the stream has been reached 想請教各位~"~ 我現在假設輸入apple 回傳j為什麼會是7?? 什麼都不輸入 直接按enter 回傳值是2 我Google了一下,在想應該是Enter的問題,可是為什麼apple不是回傳6呢? (5+1?) 還是說Enter的\n這樣算是兩個characters?? 我嘗試了一下把readTemp的值印出來 for(readTemp length) System.out.println(ReadTemp: "+readTemp[i]); 結果會出現 ReadTemp:a ReadTemp:p ReadTemp:p ReadTemp:l ReadTemp:e ReadTemp: ReadTemp: ReadTemp: ReadTemp: ReadTemp: 小弟我不了解為什麼會有空兩次格?? 另外一個問題是~API中所說的回傳-1 The end of Stream 意思是?? 請問可以幫忙舉個範例嗎?? 還是要讀file才會發生這個-1? (我猜應該不是一_一") -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.47.30.191

05/04 12:12, , 1F
如果你是windows 或許是CRLF
05/04 12:12, 1F

05/04 12:22, , 2F
帳面上完全合理阿... 5+2=7
05/04 12:22, 2F

05/04 12:23, , 3F
就是一樓說的 CRLF (CR 是 '\r' = 13, LF 是 '\n' = 10)
05/04 12:23, 3F

05/04 12:25, , 4F
另外 end of stream 在 Win 提示字元中輸入 Ctrl-Z 也可產生
05/04 12:25, 4F

05/04 12:27, , 5F
當然讀檔的話就是讀到檔案結尾就會出現了沒錯
05/04 12:27, 5F

05/04 12:34, , 6F
了解了~!謝謝各位!!
05/04 12:34, 6F

05/05 15:26, , 7F
你的輸入或文字檔是來自windows或M$的話 斷行就是\r\n了XD
05/05 15:26, 7F

05/05 20:38, , 8F
唉這東西就跟printstream問題差不多大....
05/05 20:38, 8F
文章代碼(AID): #1HX8dwIJ (java)