作者sbrhsieh (偶爾想擺爛一下)
看板java
標題Re: [問題] Java I/O 讀取不同 type 的 data stream
時間Fri Apr 30 21:55:32 2010
※ 引述《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