2012-01-31 2 views
1

BINARY 파일을 읽고이를 클라이언트에게 보내는 서블릿이 있습니다.바이너리 파일을 byte []로 읽은 다음 서블릿에서 char []로 보냄

byte[] binaryData = FileUtils.readFileToByteArray(path); 
response.getWriter().print(new String(binaryData)); 

NON BINARY 파일에서 작동합니다. 이진 파일을 가지고있을 때 receive file length bigger than origin or received file not the same이됩니다. 어떻게 바이너리 데이터를 읽고 보낼 수 있습니까?

감사합니다.

답변

8

을 통해 Writer. 작성자는 데이터이며 이진 데이터는 아닙니다. 현재 코드는 시스템 기본 인코딩을 사용하여 임의의 2 진 데이터를 텍스트로 해석하려고합니다. 그것은 정말 나쁜 생각입니다.

당신은 출력 스트림합니다 - 그래서에 데이터를 response.getOutputStream()를 사용하고, 쓰기 :

response.getOutputStream().write(FileUtils.readFileToByteArray(path)); 
+0

사람, 너 멋지다! –

4

작가를 사용하지 마십시오, 그것은 당신의 문자 인코딩을 추가합니다 항상 없을 것 1 : 1 매핑 (경험 한대로). 대신 OutputStream을 직접 사용하십시오.

그리고 즉시 사용할 필요가없는 경우 전체 내용을 읽지 마십시오. 많은 병렬 요청을 처리하면 메모리가 빨리 소비됩니다. FileUtils에는이 방법이 있습니다.

FileUtils.copyFile(path, response.getOutputStream()); 
+0

이것은 머리말에 자동으로 문자 세트를 추가하는 것에 관한 두 번째 질문에 대한 대답입니다. 감사! –

관련 문제