2012-08-15 2 views
1

매번 호출 될 때마다 수천 개의 문자열을 무작위로 생성하는 Java Servlet이 있습니다. 사용자가 서블릿을 호출 할 때 파일에서 가져올 수 있기를 바랍니다. 디스크 나 메모리에 파일을 먼저 쓰고 싶지 않습니다. 사용자가 서블릿을 호출 할 때 즉시 파일을 쓰는 방법이 있습니까? 감사합니다Java로 즉시 다운로드 할 텍스트 파일을 만듭니다.

+0

디스크 * 또는 메모리에 저장하지 않으시겠습니까? 이 파일은 사용자가 다운로드 할 수있을만큼 충분히 오래 있었습니까? 이거 좀 더 자세히 설명해 주시겠습니까? – Makoto

+0

@Makoto 글쎄, 메모리에있는 것을 의미한다면 바이트를 outputStream에 직접 쓸 수 있다고 생각했다. – Oscar

+1

@Makoto 파일의 모든 내용이 동시에 메모리에 존재할 필요는 없습니다. 일단 출력 스트림에 쓰여지면 JVM은 문자열이 사용하는 메모리를 자유롭게 정리할 수 있습니다. 그 시점의 어떤 클래스에서도 해당 문자열에 대한 참조가 없다고 가정합니다. –

답변

5

서블릿에서 생성하는 모든 텍스트는 ServletResponse.getOutputStream()에 의해 반환 된 OutputStream에 간단히 작성 될 수 있습니다.

당신은 출력이 파일로 다운로드 할 수 있도록하려면, 당신은이 대답에 접근 따를 수 - 콘텐츠 형식이 text/plain 대신 다른 InputStream로부터 읽는 것이라고, https://stackoverflow.com/a/11772700/1372207

의 차이는 것을 print(String) 메서드를 사용하여 ServletOutputStream에 직접 String 객체를 작성하면됩니다.

+0

StringBuffer를 사용하여 모든 문자열을 추가하고 마지막에이 작업을 수행해야합니까? out.write (myStringBuffer.toString(). getBytes()); – Oscar

+0

나는 그것을 추천하지 않는다. 그렇게하면 불필요하게 메모리를 사용하여 전체 "파일"을 메모리에 보관할 수 있습니다. 문자열을 생성 할 때 출력 스트림에 문자열을 쓰면 참조를 해제하고 JVM에서 사용하는 메모리를 다시 사용할 수 있습니다. –

+0

예를 들어 ServletOutputStream을 사용하고 있다면 print 메서드를 사용해야할까요? – Oscar

관련 문제