這段代碼給我帶來了一些問題。這只是服務的線程部分,用于接收通過 TCP 連接發送的數據。此數據是通過回調提供給 Activity 的圖像(160x120x16bpp = 38400 字節)。public void run() { InetAddress serverAddr; link_respawn = 0; try { serverAddr = InetAddress.getByName(VIDEO_SERVER_ADDR); } catch (UnknownHostException e) { Log.e(getClass().getName(), e.getMessage()); e.printStackTrace(); return; } Socket socket = null; DataInputStream stream; do { bad_frames = 0; frames = 0; status = FrameDecodingStatus.Idle; try { socket = new Socket(serverAddr, VIDEO_SERVER_PORT); stream = new DataInputStream(new BufferedInputStream(socket.getInputStream())); final byte[] _data = new byte[PACKET_SIZE]; final byte[] _image_data = new byte[IMAGE_SIZE]; int _data_index = 0; while (keepRunning) { if (stream.read(_data, 0, _data.length) == 0) continue; for (byte _byte : _data) { if (status == FrameDecodingStatus.Idle) { if (_byte == SoF) { status = FrameDecodingStatus.Data; _data_index = 0; } } else if ((status == FrameDecodingStatus.Data) && (_data_index < IMAGE_SIZE)) { _image_data[_data_index] = _byte; _data_index++; } else if ((status == FrameDecodingStatus.Data) && (_data_index == IMAGE_SIZE)) { if (_byte == EoF) { if(frameReadyCallBack!=null) frameReadyCallBack.frameReady(_image_data); frames++; status = FrameDecodingStatus.Idle; } } } }接收回調的Android發現數組中的數據以一種非常奇怪的方式損壞..即從某個索引開始數組中的數據被 設置為0。我怎樣才能避免這種情況?Activity
1 回答

呼啦一陣風
TA貢獻1802條經驗 獲得超6個贊
read不是readFully。三參數read返回已讀取的字節數,這不一定是所提供數組的完整長度。
此代碼刪除read返回值并處理整個數組。
if (stream.read(_data, 0, _data.length) == 0)
continue;
for (byte _byte : _data) {
添加回答
舉報
0/150
提交
取消