继续解答楼上的问题:
你要是用 BufferedOutputStream,想要把缓冲区里的发出去,就需要flush()一下
大白话翻译: 就像你用一个 杯子 将一个桶里的水转到另一个 桶里去,杯子就是这个缓冲区,你从一个桶装了一杯水,然后倒入另一个桶中,flush()就相当于将剩满水的杯子的水倒入另一个桶中的 指令, 没这个指令,那就意味着你只是装了一杯水,然后就不动了
你要是在不想用写flush(),那你就采用别的流 PrintWriter ,该流既可以接受字符流,也可以接受字节流,最重要的是它有可以自动刷新的构造方法
PrintWriter(OutputStream out, boolean autoFlush)
通过现有的 OutputStream 创建新的 PrintWriter。
不是说用s.shutdownOutput(); 非要用PrintWriter
我看了下你的代码,就算不用printwriter,也要s.shutdownOutput()
为啥呢? 大白话翻译:
就是告诉你传输的服务器端,我的数据结束了,全部写完了
若你不写该方法,也可以通过别的类似定义标记的方式,然后通过break 跳出循环 ,间接达到结束的效
果
其实s.shutdownOutput(),即使在流中添加了数据 -1,这样就跳出了该循环了
while((len=bis.read())!=-1) //循环读写
{
bos.write(len);
}
不知道我的解释,是否清晰,还有不懂的可以M我
|