시간 제한이 있는 입력 스트림에서 읽기
입력 스트림에서 읽고 시간 제한을 지정할 수 있습니까? 예, 하지만 보이는 것만큼 간단하지는 않습니다. InputStream.read() 메서드는 중단 불가능할 수 있으며, 데이터를 사용할 수 있는 경우에도 InputStream.available() 메서드는 0을 반환할 수 있습니다.
Sun 문서에서 지원하는 사실
InputStream.available()
InputStream.available()을 사용하면 차단 없이 읽을 수 있는 바이트 수의 추정치를 반환해야 하지만, 하위 클래스가 이 메서드를 재정의한다는 점에 유의하는 것이 중요합니다. 실제로 구체적인 입력 스트림 클래스는 available()에 대해 의미 있는 값을 제공합니다.
주의 사항
가장 간단한 솔루션(차단 없음)
byte[] inputData = new byte[1024]; int result = is.read(inputData, 0, is.available());
더 풍부한 솔루션(시간 초과 내 버퍼 채우기 최대화)
public static int readInputStreamWithTimeout(InputStream is, byte[] b, int timeoutMillis) throws IOException { int bufferOffset = 0; long maxTimeMillis = System.currentTimeMillis() + timeoutMillis; while (System.currentTimeMillis() < maxTimeMillis & bufferOffset < b.length) { int readLength = java.lang.Math.min(is.available(), b.length - bufferOffset); int readResult = is.read(b, bufferOffset, readLength); if (readResult == -1) break; bufferOffset += readResult; } return bufferOffset; }
위 내용은 시간 초과가 있는 Java InputStream에서 어떻게 읽을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!