Android Java: получение изображения через сокет

у меня есть приложение для связи через сокеты. Клиент отправляет изображение на сервер:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] byteArray = stream.toByteArray();
        OutputStream os;
        try {
            os = MyClient.socket.getOutputStream();
            os.write(byteArray,0,byteArray.length);
            os.flush();

На стороне сервера я хочу получить изображение, но в данный момент оно просто показывает много разных символов. Если клиент просто отправляет текст, я получаю его с помощью:

BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
String text = input.readLine();

Но как я могу «декодировать» byte[] на стороне сервера?


person L3n95    schedule 23.02.2014    source источник


Ответы (1)


Аналогично тому, как вы отправили это изображение. Просто используйте объект InputStream следующим образом:

InputStream stream = socket.getInputStream();
byte[] data = new byte[MAX_SIZE];
int count = stream.read(data);

Таким образом, оба объекта (отправляющий и получающий) совместимы, вам просто нужно знать размер массива byte, он должен быть одинаковым в обоих местах.

person nKn    schedule 23.02.2014
comment
Хорошо, это звучит проще, чем я думал, но что делать, если они имеют отношение к этому счетчику? - person L3n95; 24.02.2014
comment
На самом деле ничего. Он просто возвращает количество прочитанных байтов, но вам это не нужно, вызвав это, вы сохраните массив в своем объекте data. - person nKn; 24.02.2014
comment
Ах, хорошо, и чем я могу получить его в растровое изображение с помощью Bitmapfactory, верно? - person L3n95; 24.02.2014
comment
Конечно, как только вы получите этот byte[], вы сможете настроить его на все, что вам нужно, BitmapFactory тоже работает с ними. - person nKn; 24.02.2014