84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
我想知道我在第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对象。