이 질문은 일반적인 내용 일 수 있지만 여기에서 주요한 의미를 이해하려고합니다.ByteArrayInputStream을 사용하여 "올바른"표시/재설정 동작을 수행 할 때의 위험/보장
BCEL 라이브러리를 사용하여 일부 바이트 코드 엔지니어링을 시도하고 있으며 워크 플로의 일부에서 같은 바이트 코드 파일을 여러 번 (처음부터) 읽어야합니다. 흐름은 다음과 같습니다
// 1. Get Input Stream
// 2. Do some work
// 3. Finish
// 4. Do some other work.
4 단계에서 마크를 재설정하거나 처음부터 스트림을 가져와야합니다. 나는 다음과 같은 선택을 안다.
1) BufferedInputStream
사용하여 스트림 랩 - 얻기의 기회를 IOException이
2)는이 InputStream를 사용해서 랩 "잘못된 표시로 재설정"- 일부 온라인 조사가 오류의 제안하지만 항상 심지어 작동?
3) 스트림에서 다시 읽어야 할 경우 getInputStream()
으로 간단히 전화하십시오.
나를 위해 어떤 옵션이 더 좋을지 이해하려고합니다. 마지막으로 mark
이 호출 된 곳이 없으므로 BufferedInputStream을 사용하지 않으므로 더 높은 표시 위치에 대해 reset
을 호출하면 IOException이 발생합니다. 나를 위해 최소한의 코드 변경이 필요하기 때문에 ByteArrayInputStream을 사용하는 것이 더 좋을 것입니다.하지만 누구나 옵션 # 2 또는 옵션 # 3이 더 좋을지 제안 할 수 있습니까?
mark() 및 reset()에 대한 구현이 JDK의 ByteArrayInputStream
및 BufferedInputStream
에서 서로 다릅니다.
감사
기본적으로'.class' 파일이되는'File'을 읽고 있습니까? 한 번 읽지 않고 바이트 배열에 저장하는 것이 어떻습니까? – Eugene
@Eugene 네, 저는 이미 그렇게하고 있습니다 - 작동하지만 저는 신자 또는 "전문가 의견"이며 내가 고려하지 않은 걸음이 있기를 바라고 있습니다. 뭐 알아? – ha9u63ar
전체 입력 스트림을 읽지 않으려는 경우 mark 및 reset을 사용하는 것이 중요하다는 것을 알고 있습니다. 또는 다음에 무엇을해야하는지 알기 위해 다음의 몇 바이트를 읽으려고합니다. 그렇지 않으면 배열로 읽는 것이 가장 간단합니다 (그리고 가장 명확합니다) – Eugene