안녕하세요

 

안드로이드에서 이미지파일(jpg)을 Byte배열로 변환해서 자바서버로 보내고

 

자바서버에서는 Byte배열을 수신하여 원래의 이미지로 저장을 하는 프로그램을 만들었습니다.

 

자바서버 부분의 소스는 아래와 같은데요

 

               File f = new File("2test9.jpg");
               BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(f));
               int i;
               byte data[] = new byte[1024];
               while((i = is.read(data))!= -1 ) //is는 소캣스트림
               {
                      System.out.println("i의 값 : "+i);
                      bout.write(data, 0, i);
                      bout.flush();
                     System.out.println("버퍼의 남은 크기:" + is.available());
                    try
                   {
                        Thread.sleep(100);
                        if(is.available()==0)
                       {
                             break;
                       }
                  }

                  catch (InterruptedException e)

                 {
                         e.printStackTrace();
                 }
               }
               System.out.print("파일에 이미지 넣었슴");
               bout.close();

==============================================================================

여기서 빨간색 부분을 추가안해주면 이미지의 정상 생성은 되지만 while문의 read 함수에서 무한 대기를 걸리게 됩니다.

그래서 while((i = is.read(data))!= -1 ||  is.available() !=0 )

으로 변경시키면 스트림의 최대버퍼의 크기보다 더 많은 크기의 바이트 수가 안드로이드에서 송신되기때문에 파일을

다 받지 않은 상태에서 while문을 탈출해버리더군요. (37555 크기의 바이트를 보내게 되면 서버에서 여러번  버퍼의 크기가 0 이 되는걸

확인했습니다. 즉 스트림의 버퍼 크기가 한 5000Byte정도 되는거같더군요 )  그래서 생각낸 꼼수가 빨간줄인데 보통 저와같은 문제가 발생할 경우

코딩잘하시는 분은 어떻게 처리하시는지요??