SSISO Community

시소당

[java] 한글이 포함된 스트림을 읽는 처리시 주의점

java에서  데이터를  읽고  쓰기  위해서는  stream이  있어야겠죠.

  

문제는  이  stream에서  읽고자  하는  데이터에  한글이  포함된  경우입니다.

  

대부분의  stream에서  데이터가  몇바이트인지  알지를  못하는  경우가  대부분이죠.

  

이럴ㅤㄸㅒㅤ  이용하는  방법이  ByteArrayOutputStream  이죠.

  

        String  strFromServlet  =  "";
        //byte[]  byteFromServlet=null;
        byte[]  byteFromServlet=  null;
        byte[]  byteTmp=  null;
        
        BufferedInputStream  bufferedIn  =  new  BufferedInputStream(in);  
        ByteArrayOutputStream  bao  =  new  ByteArrayOutputStream();

        int  total_read=0  ;
        int  real_read=1;
        int  total
        String  tmp  =  null;
        while(real_read>0)  {
          byteFromServlet=  new  byte[1024];
          real_read  =  bufferedIn.read(byteFromServlet,  0,  byteFromServlet.length);
          if(real_read>0)  {
            total_read+=real_read;
            if(real_read<  byteFromServlet.length)  {  //  읽은  데이터가  1024보다  적은  경우는  해당  사이즈의  byte  배열을  다시  생성합니다.
              byteTmp  =  new  byte[real_read];
              System.arraycopy(byteFromServlet,  0,  byteTmp,  0,  real_read);  
              bao.write(byteTmp);
            }  else  {
              bao.write(byteFromServlet);
            }
            System.out.println("real_read:"  +  real_read  +  "  total_read:"  +  total_read);
          }
        }

  

이렇게  구현이  되면,  한글데이터가  잘리는  경우도  피할수  있으며,  stream의  모든  데이터를  읽을수가  있습니다.

  

이코드의  이전  버젼은  1024  바이트를  String으로  변환  후  StringBuffer에  append를  했었는데요.  한글이  짤린  경우  String으로  변환하면  해당  바이트들이  사라지는  증상으로  append한  결과  데이터는  한글이  사라지거나,  깨지는  증상이  발생할수가  있습니다.

  

결론:  Stream에서  데이터를  읽을  때는  byte로  다  읽은  후  변환을  합시다.

[출처]  [java]  한글이  포함된  스트림을  읽는  처리시  주의점.|작성자  하자두
http://blog.naver.com/hazard11?Redirect=Log&logNo=80023556714

643 view

4.0 stars