2014-12-30 6 views
0

을 지원하지 않습니다. Java에서 Input/Output을 사용하고 있습니다. 나는 여전히 정비사의 아주 기본적인 수준에 있습니다. 필자는 FileInputStream과 FileOutputStream을 사용하여 텍스트 파일에서 데이터를 읽는 방법을 배웠습니다.버퍼되지 않은 FileInputStream은 .mark (int)

FileInputStream 클래스에는 두 가지 방법을 사용하는 방법을 배우려고합니다. mark() 및 reset()입니다. 내가 읽은 작은 부분부터 스트림을 버퍼로 래핑해야합니다.

이것이 사실이라면 버퍼 객체가 자신이 mark() 및 reset()을 가지고있는 버퍼 객체 (확실하지 않은 객체)일까요?

버퍼없이 사용할 수없는 경우 왜 이러한 방법이 존재합니까?

+0

그들은 그렇지 않습니다. 이러한 메서드는 FileInputStream 및 FileOutputStream에 없습니다. – ControlAltDel

답변

0

InputStream javadoc에서 mark() 메서드는 아무 것도 수행하지 않습니다. FileInputStream에 오버로드되지 않으며 markSupported()false을 반환하지 않으며 FileInputStream도 반환하지 않습니다.

따라서 FileInputStream과 함께 사용할 수 없습니다. 그러나 BufferedInputStream에 포장하여 mark()을 구현할 수 있습니다. 따라서 버퍼 것 ...

InputStream is = new BufferedInputStream(new FileInputStream(myFile)); 
is.mark(1024); 
... 
is.reset(); 
1

마크/리셋 가용성은 InputStream의 버퍼 존재와 직접 관련되어 있지 않습니다. 스트림의 "독해 포인터"위치를 효율적으로 롤백 할 수있는 InputStream 구현은 기능을 구현해야합니다. ByteArrayInputStream는, BufferedInputStream를 확장하지 않고, 몇개의 위치 (버퍼의 사이즈까지) 밖에 되돌릴 수없는 BufferedInputStream와는 반대로, 임의의 위치에 돌아갈 수있는 InputStream의 예입니다.

관련 문제