2009-10-28 6 views
1

"text/plain"콘텐츠 유형의 경우 거대한 데이터를 보내야하는 경우 다음 중 더 효율적입니다.ServletOutputStream을 사용하여 많은 양의 데이터를 효율적으로 전송

ServletOutputStream sos = response.getOutputStream(); 

sos.write(byte[]) 
//or 
sos.println("") 

감사

당신이

에서 소스 데이터가이 문자열이라면, 당신은 가능성이 response.getPrintWriter().print()를 사용하여 더 나은 성능을 얻을거야 형식에 따라 달라집니다

답변

4

-. 그것이 가장 확실거야 인코딩에 관한 한 더 안전합니다.

바이트 배열 인 경우 ServletOutputStream.write(byte[])은 추가 변환을하지 않으므로 가장 빠를 가능성이 높습니다.

진짜 대답은하지만, 질문에 "더 빨리이다"이것과 다른 모든 것입니다 - 빨리 모두 OutputStream.write(byte[])ServletOutputStream.println(String)의 일 구현에보고 한 후 그것을 :-)

3

를 측정, 나는 더있다 말할 것 진정한 차이. 그러나 ChssPly76이 말했듯이, 그것은 그것을 측정함으로써 만 입증 될 수 있습니다.

1

가장 효율적인 것은 InputStream (ByteArrayInputStream의 풍미가 아닌)을 작성하는 것입니다.

byte []의 각 바이트가 정확하게 JVM 메모리의 1 바이트를 먹고 String의 각 문자가 JVM의 메모리에서 해당 바이트 수를 소비하기 때문에 문자는 공간을 차지합니다. 따라서 128MB의 사용 가능한 힙 메모리가 있고 "거대한"텍스트/일반 파일의 크기가 1.28MB이고 동시에 100 명의 사용자가 파일을 요청한 경우 응용 프로그램이 OutOfMemoryError로 중단됩니다. 별로 전문적이지 않습니다.

데이터베이스 또는 디스크 파일 시스템의 어딘가에 "기본"(즉, ResultSet # getBinaryStream()에 의한 DB 또는 FileInputStream에 의한 디스크)에서 "거대한"데이터를 가져 와서 그것을 쓰십시오 bytebuffer 및/또는 BufferedInputStream/BufferedOutputStream를 통해 OutputStream에 전달합니다.

그런 서블릿의 예는 here입니다.

행운을 빈다.

관련 문제