2013-03-16 3 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(); 

Но у меня есть здесь очень глупая проблема. Java дает мне ошибку, что он не может принять массив байтов для in.read (buffer) По какой-то причине кажется, что он принимает только char [], говорит: «Невозможно разрешить чтение метода (byte [])».

Кто-нибудь знает, почему это происходит или каким-либо другим способом я могу это сделать?

+0

Это не InputStream, это Reader, и это общая сумма вашей проблемы. Слишком локализован. – EJP

ответ

0

Поскольку Java поддерживает Unicode, один Java char по меньшей мере, два byte s долго, а иногда и дольше (gory details here). Это означает, что мы не можем рассматривать эти типы данных взаимозаменяемы, как мы можем на других языках, такие как С.

Поскольку вы хотите иметь дело с сырыми байтами, держаться подальше от InputStreamReader и работать непосредственно с InputStream предоставленного вашего Socket.

Что-то, как это должно работать:

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

Смежные вопросы