问大家关于java的IO流这边的几个问题,希望能得到你们的答案,谢谢了!

2025-01-05 13:50:45
推荐回答(2个)
回答1:

servletOutputStream.write(buffer, 0, flag);和servletOutputStream.write(buffer)本来就是一样的。
servletOutputStream.write(buffer, 0, flag) buffer 是向流写入的数组 0是偏移量 flag写入的长度。
servletOutputStream.write(buffer)使用的默认值 默认的偏移量是0 长度就是数组的长度,所以结果是一样的。

如果改成servletOutputStream.write(buffer, 2, flag)你再看看是不是不同了。
OutputStream.write每次都把数据写入到缓存中,然后从缓存中输出,flush方法的作用就是强制清空缓存,并且把缓存中的内存输出。OutputStream.write应该没有给一个boolean的参数控制是否追加写入,你说的控制追加写入的是FileWriter吧,那个和OutputStream不同。

回答2:

servletOutputStream是继承了OutputStream类,这个类的write()写入方法,如果write(buffer);是直接将buffer中的字节值输出,write(buffer, 0, flag)是将buffer中0-flag这段长度写入,这样操作的原因是:buffer是一个长度为1024的字节数组,用来不断的接收input传入的值,最后一次接收的值不可能是刚好1024b,所以为了不将多余的空白内容用write()方法输出,使用了write(buffer, 0, flag)

另外,BufferedInputStream 是用缓冲区在与文件传输,关闭就相当于用了flush()