2010-06-16 2 views
3

네트워크를 통해 이미지를 보내야하는 Java 프로그램 (필자는 아마도 다른 형식을 사용할 수도 있지만 PNG 형식이 바람직 함)을 작성하고 있습니다. 물론 논리적 인 방법은 먼저 PNG 이미지 데이터의 길이를 보낸 다음 데이터 자체를 보내는 것입니다. 문제 : ImageIO 또는 그 밖의 다른 방법으로 이미지 데이터의 길이를 알 수있는 방법이 표시되지 않습니다. 이것이 Java 1.6 표준 라이브러리의 어딘가에 존재합니까?데이터를 쓰기 전에 BufferedImage의 파일 크기를 가져옵니다.

나는 단지 ByteArrayOutputStream에 글을 쓸 수 있고 결과 배열의 길이를 알 수 있지만, 내가 의문의 여지가 있기 전에 내가 내장 된 것을 놓치지 않았는지 확인하기를 원했다. 게다가, 필요한 경우 이미지 데이터, 차라리하지 않을 것입니다.

+3

당신은 1 년 전에 자신에게 대답했습니다 : P http://stackoverflow.com/questions/632229/how-to-calculate-java-bufferedimage-filesize/632240#632240 – Lombo

+0

@ Lombo : LOL! 너무 나빠서 내가 찾던 때 그것을 찾지 못했습니다 ... 아마도 이것은 복제물로 폐쇄되어야한다고 생각합니다. –

답변

4

최종 콘텐츠 길이가 미리 예측할 수 없으므로이 정보를 사용할 수 없습니다. 먼저 전체 이미지를 생성해야합니다.


반면에 어떤 네트워크 프로토콜을 사용하고 있습니까? 문제의 프로토콜이 청크의 데이터 전송을 지원하는지 확인하고 싶을 수 있습니다.

예를 들어 HTTP를 사용하려면 Transfer-Encoding:chunked을 사용할 수 있습니다. 이를 통해 byte[] 버퍼를 사용하여 청크를 보낼 수 있습니다. 기본적으로 먼저 청크 길이를 나타내는 청크 헤더를 보낸 다음 CRLF와 전체 청크를 차례로 보낸 다음 두 개의 CRLF 등을 스트림 끝까지 보내고 0 길이의 청크 헤더를 보냅니다.

독자적으로 다른 인코딩을 사용하는 네트워크 프로토콜을 만들 수도 있지만, HTTP와 같은 표준 프로토콜을 사용하면 API 제공 또는 타사 도구가 많기 때문에 쉬운 일입니다. java.net.URLConnectionApache HttpComponents Client이 있으며 둘 다 청크로 데이터를 전송하는 기본 제공 기능을 갖추고 있습니다.

참조 : 물론

+0

청킹에 +1 좋은 생각. 클라이언트와 서버 모두 제가 쓰고있는 애플리케이션이기 때문에 HTTP를 사용하지는 않습니다. 단순한 소켓입니다. 단지 최소한의 소란으로 데이터를 얻고 싶기 때문입니다. (기본적으로 그것은 IPC 설정입니다. 구현하기가 빠르기 때문에 소켓을 사용하고 있습니다.) HTTP 클라이언트와 서버 라이브러리의 편재성을 감안할 때 아마도 언젠가는 그걸로 전환 할 것입니다. –

0

, 당신은 SVG를 사용하는 경우이는 정말 간단하다.

+0

사실,이 동일한 이미지 데이터는 나중에 브라우저에 표시해야하며 SVG에 대한 브라우저 지원이 아직 좋지 않다고 생각합니다. 게다가 나는 처음에 어떻게 벡터 그래픽으로 이미지를 생성 할 수 있는지 잘 모르겠다. –

관련 문제