Предположим, у меня есть метод, который принимает InputStream.
Этот метод должен обернуть этот InputStream с помощью BufferedInputStream, чтобы использовать его функции пометки и сброса. Тем не менее, переданный в InputStream может по-прежнему использоваться вызывающей стороной метода.
public static void foo(InputStream is) throws Exception {
BufferedInputStream bis = new BufferedInputStream(is);
int b = bis.read();
}
public static void main(String[] args) {
try {
InputStream is = new FileInputStream(someFile);
foo(is);
int b = is.read(); // return -1
}catch (Exception e) {
e.printStackTrace();
}
}
Мои вопросы: что именно происходит с исходным InputStream, когда BufferedInputStream читается (или инициализируется)?
Я предполагаю, что исходный InputStream также будет двигаться вперед, если BufferedInputStream будет прочитан. Однако после отладки моего кода я обнаружил, что вместо этого InputStream будет возвращать -1 при чтении.
Если исходный InputStream не читается после такого процесса, как мне достичь своей цели:
InputStream is;
foo(is); // Method only take in generic InputStream object
// Processing of the passed in InputStream object require mark and reset functionality
int b = is.read(); // Return the next byte after the last byte that is read by foo()
РЕДАКТИРОВАТЬ: Я полагаю, что то, о чем я прошу, является довольно общим и поэтому требует большой работы. Что касается того, над чем я работаю, мне на самом деле не нужна полная возможность отметки и сброса, поэтому я нашел небольшой обходной путь. Тем не менее, я оставлю вторую часть вопроса здесь, так что не стесняйтесь решать эту проблему :).