서브렛에 대한 서브렛InputStream 읽기 문제
1314 단어 servlet
나는 서브렛에 서브렛 요청을 보내고 서브렛 InputStream으로 요청한 데이터를 읽습니다.코드는 다음과 같습니다(읽은 요청 데이터가 완전하지 않은 현상이 발견되었습니다. 요청한 데이터가 4096바이트보다 많을 때 4096바이트보다 몇 번 크면 가능하기 때문에 데이터 양이 많을 때 읽은 데이터가 완전하지 않다는 것만 확인할 수 있습니다).
private static String getRequestBody(HttpServletRequest request)
throws IOException, UnsupportedEncodingException {
final int BUFFER_SIZE = 8 * 1024;
byte[] buffer = new byte[BUFFER_SIZE];
ServletInputStream sis = request.getInputStream();
int length = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
do {
length = sis.read(buffer);
if (length > 0) {
baos.write(buffer, 0, length);
}
} while (length * 2 == BUFFER_SIZE);
String bodyData = new String(baos.toByteArray(), "UTF-8");
return bodyData;
}
조정할 때 요청한 데이터 양이 4096바이트보다 현저히 많을 때도 있지만, 도 {} while () 는 한 번만 실행됩니다.
발견하다
length = sis.read(buffer);버퍼의 길이에 따라 읽히지 않을 때가 있어요.
length의 값은
length * 2 == BUFFER_SIZE 관계가 일치하면 do {} while ()가 한 번만 실행됩니다.
length == BUFFER_SIZE 저도 해봤고 도 {} while () 도 한 번만 실행합니다.
나는 때때로 클라이언트의 발송 요청이 문제가 생겼다고 의심하지만, 클라이언트가 요청한 데이터를 검사하고 출력할 때.데이터가 항상 완전하다는 것을 발견하다.보내는 동안 오류가 없습니다.
고마워요...!!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
5분 안에 JSP 배우기Java 생태계는 지난 20년 동안 많이 발전했으며 이는 시장에서 변함없이 인기를 얻고 있음으로 알 수 있습니다. 글쎄, 이것은 다른 프로그래밍 언어 중 하나에 대한 탄탄한 배경이 있거나 새로운 개발자이지만 시간이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.