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();

Но как мога да "декодирам" байта [] от страната на сървъра?


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
Добре, това звучи по-лесно, отколкото си мислех, но какво да направя, ако имам общо с този int count? - 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