InputStream 사용법을 배우고 있습니다. 나는 BufferedInputStream을위한 마크를 사용하려고했지만, 내가 다시 할 때 나는이 예외가 :버퍼링 된 입력 스트림 마크 읽기 한계
java.io.IOException: Resetting to invalid mark
나는 이것이 내 표시가 제한을 잘못 설정되어 읽을 것을 의미한다고 생각합니다. 실제로 mark()에서 읽기 제한을 설정하는 방법을 모른다. 나는 이런 식으로 시도 :
is = new BufferedInputStream(is);
is.mark(is.available());
이것은 잘못되었습니다.
is.mark(16);
이 경우에도 동일한 예외가 throw됩니다. 내가 설정해야하는 읽기 제한을 어떻게 알 수 있습니까? 입력 스트림에서 다른 파일 크기를 읽으므로
내 개인 취향이 맞습니까? 마크를 사용하지 마십시오. 확실한 이유가 있지만 확실한 이유가 있습니다. 처음에는 빈약 한 취급의 표시 인 경우가 종종 있습니다. 나는 그것이 가지고있는 가장 원시 형태를 다루지 않는 한, 하나의 흐름을 하나의 흐름이 아니라고 생각하는 경향이있다. 차라리 그 정보를 얻은 패키지 주위에 단단한 래퍼 (wrapper)를 갖고 싶습니다. 패키지를 패키지에 넣고 그 패키지를 앱 어딘가에서 보냅니다. – corsiKa
@glowcoder 의견을 보내 주셔서 감사합니다. 앞서 말했듯이, 나는 InputStream을 사용하여 새로운 일을합니다. 실제로 입력 스트림을 두 번 사용하려고했습니다. 나는 이것이 이것을하는 방법이라고 생각했다. 마크 및 리셋 설정. 이것을 어떻게 얻는 지에 대한 다른 제안이 있습니까? –
마크는 이와 같이 작동합니다. 입력 스트림이'A B C D E '가 될 것이라고 가정 해 봅시다. 지금까지'A B'를 처리합니다. ('다운 스트림'이 무엇인지 아직 모르고 있음을 기억하십시오.) 표시합니다. 그런 다음 좀 더 읽고 C D E를 얻습니다. 당신은 그것을보고 "잠깐, 나는이 모드에서'C D E'를 처리 할 수 없다!"라고 말한다. 이유가 무엇이든지. 그래서 당신은 "정말로 다시 C D E를 처리 할 수 있기를 바란다. 당신이 할 수있는 것은, 당신이 그것을 표시했기 때문이다.스트림을 표시 할 때의 위치로 되돌리려면 'reset()'하고 이전처럼 다시 읽을 수 있습니다. – corsiKa