Передача Uint8List из dart в java через TCPSocket

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

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

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

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

OUTPUT: Send data size: 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);                                    
                                }
}

OUTPUT: Received data size: 1

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
0
282
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это происходит потому, что метод 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);

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

Другие вопросы по теме