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