Java 有没有办法将输入流标记两次?
我想这样做,以便我可以调用.mark(512)中的Java 有没有办法将输入流标记两次?,java,Java,我想这样做,以便我可以调用.mark(512)中的,将流限制为512字节。然后,稍后我想将我的流限制为64字节。我可以稍后在.mark(64)中调用,然后在.reset()中调用,但仍然可以激活512标记吗?我想说的是“你能有一个mark()和reset()堆栈吗?”至少对于BufferedInputStream来说,答案肯定是否定的。它存储marklimit和markpos字段,它们只是简单的整数 您可能会编写一个,但功能不在基本Java流中。当然,这就是继承的目的。扩展您正在使用的任何流类,
,将流限制为512字节。然后,稍后我想将我的流限制为64字节。我可以稍后在.mark(64)
中调用,然后在.reset()中调用,
但仍然可以激活512标记吗?我想说的是“你能有一个mark()
和reset()
堆栈吗?”至少对于BufferedInputStream来说,答案肯定是否定的。它存储marklimit
和markpos
字段,它们只是简单的整数
您可能会编写一个,但功能不在基本Java流中。当然,这就是继承的目的。扩展您正在使用的任何流类,并重载mark和reset方法。您必须小心这样做-您正在为一个已定义约定的方法引入新功能,因此更改该约定。如果你替换了一个你没有用这种方式“调整”过的不同的子类,那么任何使用这种隐式功能的代码都会在以后发生微妙的中断…这取决于他需要如何使用流,他可以继承并最终确定你仍然有你提到的问题的类,或者他可以包装类并添加自己的功能。这是首选方法,但不允许多态性。顺便说一句,您应该返回并将一些答案标记为“已接受”。顺便说一句,在您最喜欢的流中,您可能会发现mark()/reset()是通过将数据读入数组来实现的。作为替代实现,您可以始终将数据读入数组。。。