Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法将输入流标记两次?_Java - Fatal编程技术网

Java 有没有办法将输入流标记两次?

Java 有没有办法将输入流标记两次?,java,Java,我想这样做,以便我可以调用.mark(512)中的,将流限制为512字节。然后,稍后我想将我的流限制为64字节。我可以稍后在.mark(64)中调用,然后在.reset()中调用,但仍然可以激活512标记吗?我想说的是“你能有一个mark()和reset()堆栈吗?”至少对于BufferedInputStream来说,答案肯定是否定的。它存储marklimit和markpos字段,它们只是简单的整数 您可能会编写一个,但功能不在基本Java流中。当然,这就是继承的目的。扩展您正在使用的任何流类,

我想这样做,以便我可以调用.mark(512)中的
,将流限制为512字节。然后,稍后我想将我的流限制为64字节。我可以稍后在.mark(64)
中调用
,然后在.reset()中调用
但仍然可以激活512标记吗?我想说的是“你能有一个
mark()
reset()
堆栈吗?”

至少对于BufferedInputStream来说,答案肯定是否定的。它存储
marklimit
markpos
字段,它们只是简单的整数


您可能会编写一个,但功能不在基本Java流中。

当然,这就是继承的目的。扩展您正在使用的任何流类,并重载mark和reset方法。

您必须小心这样做-您正在为一个已定义约定的方法引入新功能,因此更改该约定。如果你替换了一个你没有用这种方式“调整”过的不同的子类,那么任何使用这种隐式功能的代码都会在以后发生微妙的中断…这取决于他需要如何使用流,他可以继承并最终确定你仍然有你提到的问题的类,或者他可以包装类并添加自己的功能。这是首选方法,但不允许多态性。顺便说一句,您应该返回并将一些答案标记为“已接受”。顺便说一句,在您最喜欢的流中,您可能会发现mark()/reset()是通过将数据读入数组来实现的。作为替代实现,您可以始终将数据读入数组。。。