마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

InputStream을 String으로 변경하려고 합니다.

0 추천

 

url = new URL(urlPath.toString());
urlconn = url.openConnection();
urlconn.setReadTimeout(5000);
urlconn.setConnectTimeout(5000);
is = urlconn.getInputStream();
 
byte[] buf;
String jsondata = "";
int n = -1;
if((n = is.read()) != -1){
   buf = new byte[is.available()];
   jsondata = new String(buf);
   is.read(buf);
   jsondata = "{" + jsondata;  //<------ 이부분이 문제!! 강제로 넣어줘야만 파싱이 됨
   is.close();
}
 

위의 소스에서 자꾸 "{" 이부분이 유실된 체로 String이 완성됩니다. 그래서 강제로 넣어줘야 하죠.

문제의 원인은 조건문에 is.read()를 먼저 써서 그런걸로 추측될 뿐입니다.

그러나 read()메소드를 쓰지 않고 is.available()메소드를 쓰면 -1이 나와버려서 분기처리가 안되는 문제가 있습니다.

read()를 하고나서야 is.available()메소드에 값이 정상적으로 들어오게 됩니다.

 

다른방법으로 String을 얻어야 하나요 ? 아니면 좋은 해결방법이 있을까요?

dev_아마 (9,750 포인트) 님이 2013년 3월 26일 질문

1개의 답변

0 추천
 
채택된 답변

 

URL url = new URL(parsingUrl);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
if(conn != null) {
 
conn.setConnectTimeout(1000);
conn.setUseCaches(true);
 
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
 
while(true) {
String readStr = br.readLine();
if(readStr == null)break;
jsonString.append(readStr);
}
 
br.close();
}
conn.disconnect();
}
 
제가 파싱시 쓰는 코드중 일부...
님은 String 값을 가져오시는데 힘들게 바이트배열로 버퍼만드시구 1바이트 스트림을 쓰시네요.
BufferedReader 와 InputStreamReader로 문자열 가져오세요.
어차피 JSON은 String 이잖아요~
갸아악 (21,260 포인트) 님이 2013년 3월 26일 답변
dev_아마님이 2013년 3월 26일 채택됨
감사합니다. BufferedReader로 하니깐 해결되었네요.
...