有没有办法实现一个StringReader
类,它允许在不改变任何功能(方法)的情况下重用相同的StringReader
(或类似功能)对象,而不改变它的任何功能(方法)?
例如,这样的Java类(比如ReusableStringReader
)将是java.io.StringReader
的子类,有一个额外的方法,如
public void reset(String str);
会将新字符串值分配给内部StringReader
参数,以便对read()
StringReader
方法的所有后续调用都使用新值。当想要限制应用程序使用的对象数量时(例如,通过Reader
对象每秒处理大量字符串的对象),这种“可重用性”非常方便。
实现这一目标的一般方法是:
StringReader
对象的内部状态。要设置4个实例变量,这意味着每个“reset(String)”调用有4个反射调用(效率不高)。StringInputStream
,然后通过Reader
创建InputStreamReader
对象,然后在内部使用Reader
StringReader
的子类,用于实现StringReader
类的完整API。不过,这非常黑客。任何有关更好解决方案的想法?
答案 0 :(得分:3)
我认为你很可能在这里过早地优化非问题,除非你实际测量到StringReader
实例导致严重的GC压力。由于阅读内容而发生的分配更有可能更有意义。
所以我完全不担心可重用性:use-once实例更安全,更简单。一般而言,实际受益于重复使用轻量物体(例如读取器)是相对罕见的。
但是,如果您仍想继续这样做,只需使用Reader
编写自己的reset()
,并且不要担心JDK变体。你可能会偷看实现,但它很简单。尝试子类,委托或撰写没有什么好处:特别是如果你真的担心最小的分配数量。