问题描述
我的源代码: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();就这样读出来的内容最后会多出来一点,就是最后一点内容读了两次! 问题补充:fool_leave 写道
解决方案
代码写错了。首先不知道你的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 个 0x1100 个 0x21024-100 个 0x1你仔细想想是不是这样。你的问题就出在这里
时间: 2024-09-06 21:18:24