서브렛에 대한 서브렛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 () 도 한 번만 실행합니다.
나는 때때로 클라이언트의 발송 요청이 문제가 생겼다고 의심하지만, 클라이언트가 요청한 데이터를 검사하고 출력할 때.데이터가 항상 완전하다는 것을 발견하다.보내는 동안 오류가 없습니다.
고마워요...!!!

좋은 웹페이지 즐겨찾기