作者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
1F:推 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)
2F:推 AI3767:会不会他问题是在 reader/writer 与 in/out stream 的使用? 04/30 23:58
3F:→ AI3767:因为 binary data 不该用 reader/writer 04/30 23:59
4F:→ sbrhsieh:原文提到"BufferedInputStream去读取图片的binary data" 05/01 00:22
5F:推 AI3767:sorry, 我眼残了 XDDD 05/01 02:27