通过 TCPSocket 将 Uint8List 从 dart 传递到 java

问题描述 投票:0回答:1

我需要通过 TCPSocket 将

Uint8List
传递给 java 中的
byte[]
数组。两端尺寸不匹配。 PS:我是 dart 的初学者。

我已经尝试过

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

输出:发送数据大小: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

我确信套接字连接已正确建立,因为我能够通过它们完美地发送字符串和整数。

java sockets dart
1个回答
3
投票

发生这种情况是因为

read()
FilterInputStream
是他的儿子)的
DataInput
方法读取仅下一个可用字节。 如果你想获取输入流的总大小,请执行以下操作:

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

此代码片段取自here

© www.soinside.com 2019 - 2024. All rights reserved.