84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
我想知道我在第20行对sw字符串输出流进行了刷新,那为什么21行还会有输出?
欢迎选择我的课程,让我们一起见证您的进步~~
StringWriter实现flush方法只是因为它的父类Writer实现了Flushable接口, 如果你可以看到源码,会发现StringWriter其实啥事也没干:
/** * Flush the stream. */ public void flush() { }
flush方法是影响有目的地的buffer,让其直接输出到目的地中, 而StringWriter是直接操作内存的,没有目的地,所以flush方法对其没有意义。
你可以用sw.getBuffer().setLength(0)来实现,但它并不会缩小buffer内部存储字符数组的长度,只是将内容写成‘\0’,所以最好的方式还是新建StringWriter对象。
sw.getBuffer().setLength(0)
‘\0’
StringWriter实现flush方法只是因为它的父类Writer实现了Flushable接口,
如果你可以看到源码,会发现StringWriter其实啥事也没干:
flush方法是影响有目的地的buffer,让其直接输出到目的地中,
而StringWriter是直接操作内存的,没有目的地,所以flush方法对其没有意义。
你可以用
sw.getBuffer().setLength(0)
来实现,但它并不会缩小buffer内部存储字符数组的长度,只是将内容写成‘\0’
,所以最好的方式还是新建StringWriter对象。