看板 java 關於我們 聯絡資訊
※ 引述《muzfan (muzfan)》之銘言: : 大概像這樣: : PrintStream ps = new PrintStream(theSocket.getOutputStream()); : ps.print(command + "\r\n"); : BufferedInputStream in = new BufferedInputStream(theSocket.getInputStream()); : BufferedReader r = new BufferedReader(new InputStreamReader(in)); : r.readLine(); : BufferedOutputStream out : = new BufferedOutputStream(new FileOutputStream("image.png")); : int i = 0; : while ((i = in.read()) != -1) { : out.write(i); : } : out.flush(); : in.close(); : out.close(); : 執行的結果,可以成功讀取正確的 caracter stream 資料, : 但是,儲存下來的 image.png 卻是不正確的 : 卡住好久了,不知道我哪邊有盲點或是錯誤? 要考慮到 Buffered[Reader/InputStream] 會 pre-consume data 到內部 buffer 的行為。 #1BFkvXaF -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.128.251
muzfan:Sorry 不是很懂會 pre-consume data 到內部 buffer 的意思? 04/30 22:08
假設你把一個 InputStream 包裝成 BufferedInputStream。 InputStream srcIn = ...; BufferedInputStream in = new BufferedInputStream(srcIn); in.read(); read() method 會 return 一個 int value 即是從 stream 消耗(讀取)的 1 bytes data 的值(如果沒有遇到 EOF)。 但是 in.read() 執行之後,實際上 srcIn 被消耗的數據量可能已經大於 1 bytes。 (in.read() 操作執行時,會盡量把 srcIn stream 裡當時的 available data 都 consume 掉並存進內部的 buffer 裡。 ※ 編輯: sbrhsieh 來自: 218.173.128.251 (04/30 23:31) ※ 編輯: sbrhsieh 來自: 218.173.128.251 (04/30 23:33)
AI3767:會不會他問題是在 reader/writer 與 in/out stream 的使用? 04/30 23:58
AI3767:因為 binary data 不該用 reader/writer 04/30 23:59
sbrhsieh:原文提到"BufferedInputStream去讀取圖片的binary data" 05/01 00:22
AI3767:sorry, 我眼殘了 XDDD 05/01 02:27