Как получить точные байты из BufferReader? - PullRequest
0 голосов
/ 20 июня 2011

У меня есть клиентское приложение на Android и сервер на C #, они общаются через сокет. По запросу сервер отправляет изображение, преобразованное в байт [], но как снова декодировать его на моем устройстве в изображение?

Я уже нашел этот код:

Bitmap bmp=BitmapFactory.decodeByteArray(b,0,b.length);                     
image.setImageBitmap(bmp);

А вот часть кода клиента:

private void connectSocket(String a){ 

    try { 
        InetAddress serverAddr = InetAddress.getByName("192.168.1.2"); 
        Socket socket = new Socket(serverAddr, 4444); 

        BufferedReader in = null;

        try { 
            out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true); 
            in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

            out.println(message);

            String text = "";

            image = (ImageView)findViewById(R.id.imageView1);
            while ((text = in.readLine()) != null) {
                byte[] b = in.readLine().getBytes();
                Bitmap bmp=BitmapFactory.decodeByteArray(b,0,b.length);                     
                image.setImageBitmap(bmp);
            }

        } catch(Exception e) { 
            Log.e("TCP", "S: Error", e); 
        } finally { 
            socket.close(); 
        } 

    } catch (UnknownHostException e) { 
        Log.e("TCP", "C: UnknownHostException", e); 
        e.printStackTrace(); 
    } catch (IOException e) {  
        Log.e("TCP", "C: IOException", e); 
        e.printStackTrace(); 
    }       
} 

Итак, как получить точные полученные байты, чтобы преобразовать их в изображение?

Ответы [ 2 ]

2 голосов
/ 20 июня 2011

Читатели для текста. Для байтов в изображении вы, вероятно, вообще не хотите использовать считыватели, но должны работать из входного потока.

Для получения справки по этому вопросу см. Ответы на этот вопрос SO .

Чтобы преобразовать массив байтов в изображение, см. ссылку .

0 голосов
/ 22 сентября 2016

Вот решение, которое я в итоге придумала. Я не считаю это правильным или неправильным, но это сработало для моего проекта еще в 2011 году. К сожалению, я едва помню какие-либо подробности, касающиеся кода. Надеюсь, это поможет.

String serverIP = "192.168.0.2";

InetAddress server = InetAddress.getByName(serverIP);
Socket socket = new Socket(server, 4444);
InputStream inStream = socket.getInputStream();

byte[] buffer = new byte[16200]; // extract image from image array 
int size = inStream.read(buffer);
byte[] buffer2 = new byte[size];
for(int g = 0; g < size; g++){ 
    buffer2[g] = buffer[g];
}
image = (ImageView) findViewById(R.id.imageView1);
Bitmap bmp = BitmapFactory.decodeByteArray(buffer2, 0, buffer2.length); 
image.setImageBitmap(bmp);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...