특정 문제에는 맞춤형 솔루션이 필요합니다. 이 질문은 주어진 시간 제한 내에 입력 스트림에서 데이터를 검색하고 초과할 경우 오류 코드와 함께 정상적으로 실패하는 메서드를 구성하는 방법을 모색합니다.
이 문제를 해결하려면 이해가 필요합니다. Java의 InputStream 클래스:
문제 설명의 주장과 달리, InputStream.available()은 항상 0을 반환하지 않습니다. 차단 없이 데이터를 사용할 수 있습니다. 그러나 실제 데이터 수를 과소평가할 수 있습니다.
이 간단한 접근 방식은 차단 또는 시간 초과 제약 조건을 부과하지 않습니다.
byte[] inputData = new byte[1024]; int result = is.read(inputData, 0, is.available());
보다 세부적인 제어를 위해 메서드는 지정된 범위 내에서 사용 가능한 데이터로 버퍼를 채울 수 있습니다. timeout:
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; }
byte[] inputData = new byte[1024]; int readCount = readInputStreamWithTimeout(System.in, inputData, 6000); // 6 second timeout
이는 차단 및 비차단 입력 소스 모두에 대한 시간 초과를 사용하여 InputStream에서 읽는 방법을 제공합니다.
위 내용은 시간 초과가 있는 Java InputStream에서 읽는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!