Передайте Uint8List из дротика в java через TCPSocket - PullRequest
0 голосов
/ 10 января 2019

Мне нужно передать Uint8List массиву byte[] в java через TCPSocket. Существует несоответствие размера на обоих концах. PS: я новичок в дартс.

Я пробовал socket.add(buf), socket.write(buf), socket.writeAll(buf), но ни один из них не работал

Код на стороне флаттера (TCP-клиент)

 void readVoiceData(Uint8List buf) {    
     print("Send data size:"+buf.lengthInBytes.toString());    
     socket.add(buf);   
 }

ВЫХОД: Отправьте данные размером: 1280

Фрагмент кода на стороне Java (сервер TCP)

in = new DataInputStream(clientSocket.getInputStream());  
    Log.d(TAG, "****Opened InputStream*******");
     while (!isInterrupted()) {                   
     if (mTrack != null) {
     try {
     in.read(bytes);        
     Log.d(TAG, "Received data size"+bytes.length);                                    
                                }
}

ВЫХОД: Размер полученных данных: 1

Я уверен, что сокетное соединение установлено правильно, так как я могу без проблем передавать строки и целые числа.

1 Ответ

0 голосов
/ 10 января 2019

Это происходит потому, что метод read() FilterInputStream (DataInput - его сын) читает только следующий доступный байт . Если вы хотите получить общий размер InputStream, сделайте что-то вроде:

  size = in.available(); //returns an estimate of number of bytes avaliable on the stream
  buf = new byte[size]; 
  realLength= in.read(buf, 0, size);

Этот фрагмент кода взят из здесь .

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