2013-03-16 5 views
0

을 읽는 동안 나는 바이트 배열에 PNG로 이미지를 변환하고 안드로이드에서 안드로이드 에 클라이언트 소켓을 사용하여 전송 우는 소리 같이 내가 바이트를 읽을 수 있어요 :의 InputStream 오류 바이트를

ByteArrayOutputStream dataBuffer = new ByteArrayOutputStream(); 
InputStreamReader in = new InputStreamReader(s.getInputStream()); 
int readLength; 
byte buffer[] = new byte[1024]; 
while ((readLength = in.read(buffer)) != -1) { 
dataBuffer.write(buffer, 0, readLength); 
} 
byte bitmapdata[] = dataBuffer.toByteArray(); 

을하지만 난이 여기 아주 어리석은 문제. 자바는 나에게 in.read (버퍼)에 대한 바이트 배열을 받아 들일 수 없다는 오류를 준다. 어떤 이유에서인지 char []만을 허용하는 것으로 보입니다. "메소드 읽기 (byte [])를 해결할 수 없습니다"라고되어 있습니다.

누구나 이런 일이 발생했는지 또는 다른 방법으로이 작업을 수행 할 수 있는지 알 수 있습니까?

+0

이것은 InputStream이 아니며 Reader이고 문제의 총계입니다. 너무 현지화되었습니다. – EJP

답변

0

자바는 유니 코드를 지원하기 때문에, 하나의 자바 char는 적어도 두 byte의 긴, 때로는 이상 (gory details here)입니다 : 여기에 귀하의 문제를 해결하는 예입니다. 이것은 우리가 같은

당신은, 생의 바이트를 처리 InputStreamReader 멀리하고 Socket에서 제공하는 InputStream 직접 작업을 원하기 때문에 C.

으로 다른 언어로 상호 교환 우리가 할 수있는 이러한 데이터 유형을 처리 할 수 ​​없음을 의미합니다.

이런 식으로 뭔가 작동합니다 : 그것은 관련된 두통의 많은 떨어져 숨 깁니다으로

ByteArrayOutputStream dataBuffer = new ByteArrayOutputStream(); 
InputStream in = s.getInputStream(); 
int readLength; 
byte buffer[] = new byte[1024]; 
while ((readLength = in.read(buffer, 0, buffer.length)) != -1) { 
    dataBuffer.write(buffer, 0, readLength); 
} 
byte bitmapdata[] = dataBuffer.toByteArray(); 

당신이 당신의 Socket에서 대신 이미지 데이터의 텍스트를 읽을 기대한다면, InputStreamReader은 갈 수있는 방법이 될 것입니다 가변 바이트 문자 인코딩 형식 (more info here)

+0

도움 주셔서 감사합니다. 나는 내 자신에 의해 그것을 알아낼 수 없다는 어리 석음을 느낀다 : P – user1964589