作者muzfan (muzfan)
看板java
标题Re: [问题] Java I/O 读取不同 type 的 data stream
时间Sun May 2 13:26:23 2010
※ 引述《sbrhsieh (偶尔想摆烂一下)》之铭言:
: ※ 引述《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
感谢提醒。
我更改了我的程式如下:
public void saveImage(String command) {
try {
PrintStream ps = new PrintStream(theSocket.getOutputStream());
ps.print(command + "\r\n");
BufferedInputStream in = new
BufferedInputStream(theSocket.getInputStream());
clearEOL(in);
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();
} catch (IOException e) {
System.err.println("Err at saveImage(): " + e);
}
}
private void clearEOL(BufferedInputStream in) {
byte[] b = new byte[1];
boolean eol = false;
try {
while (in.read(b, 0, 1) != -1) {
// only stop when we see \r (13) followed by \n (10)
if(b[0] == 13) {
eol = true;
continue;
}
if(eol) {
if(b[0] == 10)
break;
eol = false;
}
}
} catch(IOException e) {
System.err.println("Err at clearEOL(): " + e);
}
}
先利用 clearEOL 过滤掉第一行的图片字串资讯,然後再继续读取图片的 binary data,
然而,所存下的图片仍然是错误的,不知道我的程式码哪边有误?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 130.95.99.105
※ 编辑: muzfan 来自: 130.95.99.105 (05/02 13:50)
1F:→ muzfan:我犯了愚蠢的错误,这个程式是对的了。感谢大家的帮忙 05/02 16:47
2F:推 PsMonkey:施主,你自尽吧 [误] XDXD 05/02 17:11