是否有任何实现StringReader类的方法,允许重用具有多个字符串的相同StringReader (或类似功能)对象,而不更改其任何功能(方法)?
例如,这样一个Java类(例如,ReusableStringReader)将是java.io.StringReader的一个子类,有一个额外的方法,如
public void reset(String str);它将新字符串值赋值给内部StringReader参数,以便对StringReader的read()方法的所有后续调用都使用新值。当您希望限制应用程序使用的对象的数量时(例如,通过Reader对象每秒处理大量字符串的对象),这样的“可重用性”非常方便。
实现这一目标的一般方法是:
StringReader对象的内部状态。有4个实例变量需要设置,这意味着在每个“重置(字符串)”调用中有4个反射调用(不太有效)。StringInputStream,然后通过InputStreamReader创建一个Reader对象,然后在StringReader的子类中使用这个Reader来实现StringReader类的完整API。不过,这是个相当大的黑客。有更好的解决办法吗?
发布于 2015-04-22 23:14:44
我认为您很可能在这里过早地优化了一个无问题的问题,除非您已经实际测量到StringReader实例会造成严重的GC压力。更有可能的是,由于阅读内容而产生的分配更有意义。
因此,我一点也不担心可重用性:一旦实例变得更加安全和简单,就可以使用它。一般来说,相对较少的实际受益于轻量级对象的重用,例如读取器。
但是,如果您仍然想要这样做,只需使用Reader编写自己的reset(),而不必担心JDK变体。您可以查看实现,但它非常简单。尝试子类、委托或组合几乎没有什么好处:特别是当您真正关心的是数量最少的分配时。
https://stackoverflow.com/questions/29810488
复制相似问题