为什么我从inputstream里面读出内容的时候会多读出一部分呢

我的源代码:

InputStream is = ms.getInputStream();
OutputStream s = new FileOutputStream("d:/temp/demo.html");
byte b[] = new byte[1024];
while (is.read(b) != -1) {
os.write(b);
os.flush();
}
is.close();
os.close();

就这样读出来的内容最后会多出来一点,就是最后一点内容读了两次!

代码写错了。
首先不知道你的s是做什么用的。
假设你的is是从一个文件读的流,os是往另外一个文件写的流。
is.read(b)是从is流中读取最多b.length长度数据。如果已经读完了,则返回读取的长度。如果全部读完,最后会返回-1。
os.write(b)是将b中的数据全部写入os流.
应该:
int size=0;
while((size=is.read(b))!=-1){
os.write(b,0,size);
os.flush();
}

试想一下,如果你的文件有1124个字节,用你的方法去做,会怎样?
第一次循环,读取1024个字节,然后将这1024写入另外一个文件,这一步没有错
第二次循环,读取100个字节,可问题是写入的时候会将1024个字节全部写入的文件。
如果第一次读取的前1024个字节都是0x1,之后的100个字节都是0x2,那么你写入到文件的字节会是这样:
1024 个 0x1
100 个 0x2
1024-100 个 0x1

你仔细想想是不是这样。你的问题就出在这里