1. 입력 스트림 정보. 읽기 ()
데이터 스트림에서 데이터를 읽을 때 그래프는 간단하고 inputStream.Read () 메소드가 종종 사용됩니다. 이 방법은 한 번에 스트림에서 하나의 바이트 만 읽는 것이며, 이는 매우 비효율적입니다. 더 좋은 방법은 입력 스트림 (byte [] b) 또는 inputStream.read (byte [] b, int off, int len) 메소드를 사용하여 한 번에 여러 바이트를 읽는 것입니다.
2. 입력 스트림 클래스의 사용 가능한 () 메소드에 대해
한 번에 여러 바이트를 읽을 때 inputStream.available () 메소드가 종종 사용됩니다. 이 방법이 로컬 파일의 데이터를 읽는 데 사용되는 경우 일반적으로 문제가 발생하지 않지만 네트워크 작업에 사용되는 경우 종종 문제가 발생합니다. 예를 들어, 소켓이 의사 소통 할 때 상대방은 1,000 바이트를 명확하게 보냈지 만 그의 프로그램은 사용 가능한 () 메소드가 900 또는 100 또는 0 만 얻습니다. 약간 설명 할 수 없으며 그 이유를 찾을 수 없습니다. 실제로, 이것은 네트워크 통신이 종종 간헐적이며, 바이트 문자열이 종종 여러 배치로 전송되기 때문입니다. 로컬 프로그램은 가용 () 메소드가 0을 얻습니다. 다른 당사자가 아직 응답하지 않았기 때문에 또는 다른 당사자가 응답했기 때문일 수 있지만 데이터가 지역으로 전달되지 않았기 때문일 수 있습니다. 상대방은 1,000 바이트를 보냈으며 아마도 3 개의 배치로 도착했을 것입니다.
다음과 같은 코드를 작성하는 경우 :
int count = in.available () byte [] byte [count];
사용 가능한 () 메소드를 호출 할 때 보내기로 전송 된 데이터가 아직 도착하지 않았고 얻을 수있는 카운트가 0이기 때문에 네트워크 작업을 수행 할 때 오류가 종종 있습니다.
다음과 같이 변경해야합니다.
int count = 0;
3. InputStream.Read (byte [] b) 및 inputStream.Read (byte [] b, int off, int len).
두 방법 모두 스트림에서 여러 바이트를 읽는 데 사용됩니다.이 두 가지 방법은 종종 읽을 바이트 수를 읽을 수 없습니다. 예를 들어, 첫 번째 방법에서 프로그래머는 종종 프로그램이 B.length 바이트를 읽을 수 있기를 희망하지만 실제 상황은 시스템이 종종 많은 것을 읽을 수 없다는 것입니다. Java API 지침을주의 깊게 읽은 후에는이 방법이 많은 바이트를 읽을 수 있음을 보장하지 않으며, 많은 바이트 (최소 1)까지 읽을 수 있음을 보장 할 수 있습니다. 따라서 프로그램이 바이트 카운트를 읽으려면 다음 코드를 사용하는 것이 가장 좋습니다.
byte [] b = int readcount = 0; }
이 코드는 데이터 스트림의 중간 또는 끝에서 IO 예외가 발생하지 않는 한 카운트 바이트를 읽을 수 있습니다 (Eofexception).
4. PowerPoint 파일을 읽는 예
import org.apache.lucene.document.hslf.hslfslideshow; hslf .slide; 슬라이드 쇼 SS = 새 슬라이드 쇼 (New HSLFSLIDSHOW (is)); // IS는 파일의 입력 스트림입니다. 슬라이드 슬라이드 [] 슬라이드 = ss.GetSlides (); // (int i = 0; i <에 대한 각 슬라이드를 가져옵니다. slides.length; i ++) {textrun [] t = 슬라이드 [i] .gettextruns (); // // 슬라이드의 텍스트 내용을 얻으려면 (int j = 0; j <t.length; ) {content .append (t [j] .getText ()); // 텍스트 내용이 컨텐츠에 추가됩니다. 제목, catch (예외) {ex.toString ()}};