시소당
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