다양한 방법으로 출력 스트림에 쓰고 있습니다. 어떻게 끝내기 전에 outputstream의 내용 길이를 찾을 수 있습니까?출력 스트림 내용 길이에 응답 하시겠습니까?
답변
가장 쉬운 방법은 다른 쓰기 요청을 전달하지만 내부 카운터는 유지하는 또 다른 OutputStream
구현에이 방법을 사용하는 것입니다. 그런 다음에 그 대신에 글을 씁니다. 구현하기에는 너무 어렵지 않아야합니다. 실제로 이미 하나가있을 수 있습니다.
편집 : 합리적인 이름 (CountingOutputStream
)으로 추측하면 Apache Commons IO에 구현 된 것입니다.
EDIT : HTTP 용으로 클라이언트가 아직 전체 데이터를 버퍼링하지 않고있는 경우 (은 콘텐츠 길이를 초과 할 수 있음) 을 쓰고 나서 데이터를 쓰려고하기 때문에 문제가 있습니다. 경우에 따라 특정 크기 (클라이언트가 버퍼링 한)까지 작동 한 다음 실패 할 수도 있습니다. 이 경우 데이빗의 해결책이 적절할 것입니다.
자신의 ByteArrayOutputStream에 쓰기를 고려하고 맨 끝에 응답 출력 스트림으로 플러시 할 수 있습니다.
그러나 byte []의 모든 바이트가 JVM 메모리의 1 바이트를 먹으면서 메모리가 매우 많이 소모됩니다. – BalusC
출력 스트림에 데이터 쓰기를 시작하기 전에 응답 헤더에 콘텐츠 길이를 설정해야한다는 점이 문제입니다. 따라서 옵션은 다음과 같습니다.
- ByteOutputStream을 사용하여 데이터를 [] 배열에 쓴 다음 데이터 크기가되면 응답 출력 스트림에 복사합니다. 그러나 대용량 파일을 작성하는 경우 이는 분명히 옵션이 아닙니다.
- 임시 파일에 데이터를 쓴 다음 파일 크기를 얻으면이를 응답 출력으로 복사하십시오. 당신이하는 일에 따라, 이것은 용납 될 수없는 성능 저하를 가져올 수 있습니다.
- 처음부터 데이터를 생성하는 것이 얼마나 비쌉니까, 한 번 생성하여 버려 수를 가져 와서 다시 생성 할 수 있습니다. 이것이 현실적인 해결책이 될 것 같지는 않습니다.
- 응답 헤더에서 콘텐츠 길이를보고 할 수 없다는 사실에 자신을 사칭하십시오.
- 1. 출력 스트림
- 2. WCF 서비스에서 스트림 응답
- 3. ASP.net 연속 응답 스트림
- 4. 루비 : 내용 길이에 따라 OpenURI을 중단
- 5. div의 iframe 내용 출력 내용
- 6. 재설정 표준 출력 스트림
- 7. JMF 출력 스트림
- 8. 가짜 출력 스트림 유형
- 9. PHP의 출력 스트림 제어하기
- 10. 응답 내용 유형
- 11. WCF 응답 개체 내용
- 12. PHP의 대형 SOAP 응답 스트림
- 13. Http 라이브 스트림 비디오 내용
- 14. RoR 응답 출력 유형
- 15. 응답 출력 스트림에서 파일/스트림을 로컬 폴더에 저장 하시겠습니까?
- 16. 출력 캐시가 응답 헤더를 고려합니까?
- 17. 서블릿 출력 스트림에서 응답 문제
- 18. App Engine - 출력 응답 시간
- 19. PHP - 배열의 특정 내용 출력
- 20. PHP pdf 파일 출력 내용
- 21. 큰 스트림 읽기를위한 HttpWebRequest 및 응답
- 22. JNI 인터페이스를 통한 출력 스트림 공유
- 23. 클래스 내 출력 파일 스트림 정의
- 24. java 데이터 출력 스트림 getOutputStream() getInputStream()
- 25. Indy HTTP : 403에서 응답 내용 읽기
- 26. JSP 페이지가 응답 내용 유형을 설정하지 않음
- 27. Django 응답 객체의 내용 길이를 얻으려면 어떻게해야합니까?
- 28. asp.net mvc에서 응답 내용 유형을 감지하는 방법
- 29. GDI + 오류를 제공하는 응답 출력 스트림에 이미지 출력
- 30. 출력 스트림으로 생성 된 이진 출력 파일의 내용
U, Apache Commons! 나는 아파치 커먼스를 잊지 않고 시작해야한다 !!! 나는 시도 할 것이다. – Trick
작동 중입니다. – Trick
대용량 데이터에서도 작동합니까? David의 언급과 마찬가지로 응답의 outputStream에 무엇이든 쓰기 전에 "Content-length"헤더를 설정해야합니다. –